在将我的网站转换为使用utf-8之后,我现在面临着验证所有传入的utf数据的前景,以确保其有效和连贯。
似乎有各种正则表达式和PHP API来检测字符串是否为utf,但我看到的似乎不完整(regexps验证utf,但仍然允许无效的第3个字节等)。
我还关注检测(和防止)过长编码,这意味着可以编码为多字节utf序列的ASCII字符。
欢迎任何建议或链接!
答案 0 :(得分:6)
mb_check_encoding()专为此目的而设计:
mb_check_encoding($string, 'UTF-8');
答案 1 :(得分:1)
你可以用iconv
做很多事情,告诉你序列是否有效UTF-8。
告诉它从UTF-8转换为相同的:
$str = "\xfe\x20"; // Invalid UTF-8
$conv = @iconv('UTF-8', 'UTF-8', $str);
if ($str != $conv) {
print("Input was not a valid UTF-8 sequence.\n");
}
以字节为单位询问字符串的长度:
$str = "\xfe\x20"; // Invalid UTF-8
if (@iconv_strlen($str, 'UTF-8') === false) {
print("Input was not a valid UTF-8 sequence.\n");
}