gpt4 book ai didi

php - 如何在 PHP 中检测格式错误的 UTF-8 字符串?

转载 作者:IT王子 更新时间:2023-10-28 23:49:28 24 4
gpt4 key购买 nike

iconv 函数有时会报错:

Notice:
iconv() [function.iconv]:
Detected an incomplete multibyte character in input string in [...]

有没有办法在向 inconv() 发送数据之前检测 UTF-8 字符串中是否存在非法字符?

最佳答案

首先,请注意,无法检测文本是否属于特定的不需要的编码。您只能检查字符串在给定编码中是否有效。

您可以使用 preg_match [PHP Manual] 中提供的 UTF-8 有效性检查。自 PHP 4.3.5 起。如果给出无效字符串,它将返回 0(没有附加信息):

$isUTF8 = preg_match('//u', $string);

另一种可能性是mb_check_encoding [PHP Manual] :

$validUTF8 = mb_check_encoding($string, 'UTF-8');

您可以使用的另一个函数是mb_detect_encoding [PHP Manual] :

$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));

strict 参数设置为 true 很重要。

此外,iconv [PHP Manual]允许您动态更改/删除无效序列。 (但是,如果 iconv 遇到这样的序列,它会生成通知;此行为无法更改。)

echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $string), PHP_EOL;
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $string), PHP_EOL;

您可以使用 @ 并检查返回字符串的长度:

strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string));

请查看 iconv 手册页上的示例。

关于php - 如何在 PHP 中检测格式错误的 UTF-8 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6723562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com