rsk*_*k82 22 php encoding utf-8 iconv
iconv函数有时会给我一个错误:
Notice:
iconv() [function.iconv]:
Detected an incomplete multibyte character in input string in [...]
Run Code Online (Sandbox Code Playgroud)
有没有办法在将数据输入到无线电之前检测到utf-8字符串中存在非法字符?
hak*_*kre 48
首先,请注意,无法检测文本是否属于特定的非期望编码.您只能检查字符串在给定编码中是否有效.
您可以使用自PHP 4.3.5以来preg_match [PHP手册]中提供的UTF-8有效性检查.0如果给出了无效字符串,它将返回(没有其他信息):
$isUTF8 = preg_match('//u', $string);
Run Code Online (Sandbox Code Playgroud)
另一种可能性是mb_check_encoding [PHP手册]:
$validUTF8 = mb_check_encoding($string, 'UTF-8');
Run Code Online (Sandbox Code Playgroud)
您可以使用的另一个功能是mb_detect_encoding [PHP手册]:
$validUTF8 = ! (false === mb_detect_encoding($string, 'UTF-8', true));
Run Code Online (Sandbox Code Playgroud)
将strict参数设置为是很重要的true.
此外,iconv [PHP手册]允许您动态更改/删除无效序列.(但是,如果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;
Run Code Online (Sandbox Code Playgroud)
您可以使用@并检查返回字符串的长度:
strlen($string) === strlen(@iconv('UTF-8', 'UTF-8//IGNORE', $string));
Run Code Online (Sandbox Code Playgroud)
另请参阅iconv手册页上的示例.
您尚未共享产生通知的源代码.如果你想要一个更具体的建议,你应该添加它.
| 归档时间: |
|
| 查看次数: |
30535 次 |
| 最近记录: |