2

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

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

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

欢迎任何建议或链接!

4

2 回答 2

7

mb_check_encoding()就是为此目的而设计的:

mb_check_encoding($string, 'UTF-8');
于 2011-10-23T21:52:47.277 回答
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");
}
于 2011-10-23T21:50:39.287 回答