PHP:在UTF-8字符串替换无效字符(PHP: replace invalid character

2019-07-18 06:11发布

如何替换无效字符的空格字符(PHP5使用正则表达式)的UTF-8字符串?

Answer 1:

使用的iconv

$text = iconv("UTF-8", "UTF-8//IGNORE", $text);

看说明书 。

干杯



Answer 2:

随着MBSTRING你可以这样做:

$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');

将工作,只要你想(通过替换空格无效字符),但似乎并没有工作,如果你想用别的东西来代替无效字符,如?

请参阅: 问号更换无效的UTF-8字符,mbstring.substitute_character似乎忽略



Answer 3:

该的iconv不工作我的情况下(如其他解决方案),所以我找到了我在这里的一部分“字符验证”:

http://webcollab.sourceforge.net/unicode.html



Answer 4:

如果您所遇到的诅咒“无效字符”错误而使用PHP的XML或JSON解析器,那么你可能会感兴趣。

不幸的是,PHP的XML和JSON解析器不要忽略非UTF8字符,而是他们停止扔一个相当无用的错误。 我发现下面的代码形式净,对我很好地工作..

//reject overly long 2 byte sequences, as well as characters above U+10000 and replace with ?
$some_string = preg_replace('/[\x00-\x08\x10\x0B\x0C\x0E-\x19\x7F]'.
 '|[\x00-\x7F][\x80-\xBF]+'.
 '|([\xC0\xC1]|[\xF0-\xFF])[\x80-\xBF]*'.
 '|[\xC2-\xDF]((?![\x80-\xBF])|[\x80-\xBF]{2,})'.
 '|[\xE0-\xEF](([\x80-\xBF](?![\x80-\xBF]))|(?![\x80-\xBF]{2})|[\x80-\xBF]{3,})/S',
 '?', $some_string );

//reject overly long 3 byte sequences and UTF-16 surrogates and replace with ?
$some_string = preg_replace('/\xE0[\x80-\x9F][\x80-\xBF]'.
 '|\xED[\xA0-\xBF][\x80-\xBF]/S','?', $some_string );


文章来源: PHP: replace invalid characters in utf-8 string in
标签: php regex utf-8