在将我的网站转换为使用 utf-8 之后,我现在面临验证所有传入 utf 数据的前景,以确保其有效和连贯。
似乎有各种正则表达式和 PHP API 来检测字符串是否为 utf,但我见过的似乎不完整(验证 utf 的正则表达式,但仍允许无效的第 3 个字节等)。
我还关心检测(和防止)过长编码,这意味着可以编码为多字节 utf 序列的 ASCII 字符。
欢迎任何建议或链接!
mb_check_encoding()就是为此目的而设计的:
mb_check_encoding($string, 'UTF-8');
你可以做很多事情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");
}