如何在PHP中验证utf序列?

时间:2011-10-23 21:39:37

标签: php utf-8 utf

在将我的网站转换为使用utf-8之后,我现在面临着验证所有传入的utf数据的前景,以确保其有效和连贯。

似乎有各种正则表达式和PHP API来检测字符串是否为utf,但我看到的似乎不完整(regexps验证utf,但仍然允许无效的第3个字节等)。

我还关注检测(和防止)过长编码,这意味着可以编码为多字节utf序列的ASCII字符。

欢迎任何建议或链接!

2 个答案:

答案 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");
}