如何在空白字符中替換(在PHP5中使用正則表達式)utf-8字符串中的無效字符?PHP:替換utf-8字符串中的無效字符
回答
這對我來說不起作用。無效字符停留。就像它不適用於bobef。它只是不做這項工作。 – Rodniko 2013-04-10 14:06:43
這對我有用。源文件下載了SBA特許經營代碼的CSV格式,我手動格式化爲JSON以用於Laravel播種機。但即使我的格式化文件通過了JSON驗證,仍然存在PHP無法解碼的文件中隱藏的無效UTF-8字符。 – Ixalmida 2017-06-12 21:01:07
我還沒有調試到細節,但iconv以及mb_convert不解決問題與json_encode() 它可能有助於在許多情況下,而不是。 – John 2018-01-13 07:21:35
的的iconv不工作我的情況下(如其他解決方案),所以我找到了我在這裏的一部分「字符驗證」:
隨着MBSTRING可以請執行以下操作:
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
將按需要工作(用空格替換無效字符),但如果你想用其他東西替換無效字符,如?
,似乎不起作用。
參見:Replacing invalid UTF-8 characters by question marks, mbstring.substitute_character seems ignored
如果您所遇到的詛咒「無效字符」錯誤而使用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);
不能解決json_encode的問題。 它報告一些有效的UTF8也是無效的,遺憾的是沒有給出線索是什麼問題。 – John 2018-01-13 07:32:42
- 1. PHP中的高效字符串替換
- 2. 替換utf8中的所有非單詞字符字符串
- 3. 如何替換XML字符串中的無效字符?
- 4. JavaScript字符串替換等效於PHP?
- 5. 替換非UTF8字符
- 6. 示例無效utf8字符串?
- 7. 字符串中的字符串替換
- 8. 如何用空格替換無效的UTF8字符
- 9. 字符串替換PHP
- 10. PHP替換字符串
- 11. PHP:替換字符串
- 12. PHP RegEx字符串替換
- 13. PHP:替換字符串
- 14. PHP字符串替換?
- 15. 替換字符串用PHP
- 16. 字符串替換(PHP)
- 17. PHP替換字符串
- 18. PHP替換字符串
- 19. PHP替換「字符串
- 20. PHP字符串替換「&」
- 21. PHP - 字符串替換
- 22. 替換字符串PHP
- 23. 替換字符串在PHP
- 24. PHP的json_encode轉換UTF8字符串的字符代碼
- 25. 替換字符串字符
- 26. 字符串替換從PHP中的字符串的HTML
- 27. 替換javascript中的無效字符
- 28. 替換字符串中的字符Java
- 29. Java - 替換字符串中的字符
- 30. 替換字符串中的字符
那你想幹什麼?擺脫空白?或utf-8字符? 舉個例子。 – 2009-09-16 15:19:59
擺脫UTF-8字符很簡單:'$ text ='';':-) – Joey 2009-09-16 15:26:08