iconv函数有时会给我一个错误:
Notice: iconv() [function.iconv]: Detected an incomplete multibyte character in input string in [...]
有没有办法在将数据放入inconv之前检测到utf-8字符串中存在非法字符?
首先,请注意,无法检测文本是否属于特定的不需要的编码。您只能检查字符串在给定编码中是否有效。
您可以使用从PHP 4.3.5 开始在preg_match
preg_match
可用的UTF-8有效性检查。0如果给出了无效的字符串,它将返回(没有其他信息):
0
$isUTF8 = preg_match('//u', $string);
另一种可能是[mb_check_encoding
mb_check_encoding
$validUTF8 = mb_check_encoding($string, 'UTF-8');
您可以使用的另一个功能是[mb_detect_encoding
mb_detect_encoding
$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));
将strict参数设置为至关重要true。
strict
true
此外,iconv 允许您即时更改/删除无效序列。但是,如果iconv遇到这样的序列,它将生成一个通知;此行为无法更改。
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还要查看手册页上的示例。
您尚未共享发出通知的源代码。如果需要更具体的建议,则应添加它。