$string = iconv("UTF-8", "UTF-8//IGNORE", $string);
我认为此代码会删除无效的UTF-8字符,但会生成[E_NOTICE] "iconv(): Detected an illegal character in input string"
。我错过了什么,如何从非法字符中正确地删除字符串?
答案 0 :(得分:5)
输出字符集(第二个参数)应与输入字符集(第一个参数)不同。如果它们相同,那么如果字符串中存在非法的UTF-8字符,iconv
将根据输入的字符集拒绝它们为非法。
答案 1 :(得分:0)
我知道2种方法来修复包含非法字符的UTF-8字符串:
$message = mb_convert_encoding($message, 'UTF-8', 'UTF-8');
$message = iconv('UTF-8', 'UTF-8//IGNORE', $message);
实际上描述了第二种方法。但就我而言,它不会产生任何E_NOTICE
。我使用error_reporting(E_ALL);
对不同的损坏的UTF-8字符串进行了测试,结果始终如预期。自2012年以来,可能有所更改。我在PHP 7.2.9 Win上进行了测试。
答案 2 :(得分:0)
我正在使用带有波纹管设置的 mb_convert_encoding 删除无效字符
ini_set('mbstring.substitute_character', "none");
$string= mb_convert_encoding($string, 'UTF-8', 'UTF-8');
它在我的情况下有效。早些时候我收到了以下通知
<块引用>注意:iconv():字符集错误,不允许从 UTF-8' to
UTF-8//IGNORE' 转换
$string= iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $string)
答案 3 :(得分:-1)
要简单地忽略通知,您可以使用&#34; @&#34;:
$string = @iconv("UTF-8", "UTF-8//IGNORE", $string);