に置き換えてください。空白文字のutf-8文字列で無効な文字を置き換える(PHP5ではregexを使用します)?PHP:utf-8文字列の無効な文字を
$text = iconv("UTF-8", "UTF-8//IGNORE", $text);
のiconv
に置き換えてください。空白文字のutf-8文字列で無効な文字を置き換える(PHP5ではregexを使用します)?PHP:utf-8文字列の無効な文字を
$text = iconv("UTF-8", "UTF-8//IGNORE", $text);
のiconv
使用はmanualを参照してください。
乾杯
これは私のためには機能しませんでした。無効な文字が残りました。ちょうどそれがbobefのために働かなかったように。それはちょうど仕事をしません。 – Rodniko
これは私のために働いた。ソースファイルがSBAフランチャイズコードのCSVをダウンロードされました。これをLaravelシーダーで使用するためにJSONに手動でフォーマットしました。しかし、私のフォーマットされたファイルがJSONの検証をパスしたとしても、PHPが解読できなかったファイルには、隠された無効なUTF-8文字がまだ残っていました。 – Ixalmida
私はまだ詳細をデバッグしていませんが、iconvとmb_convertはjson_encode()の問題を解決しません。 多くの場合に役立つかもしれません。 – John
のiconvが(他のソリューションとして)私の場合は働いていなかったので、私は「文字の検証」の部分で、ここで鉱山を発見した:
することができますをmbstringのでdo:
$text = mb_convert_encoding($text, 'UTF-8', 'UTF-8');
無効な文字を空白で置き換えます。無効な文字を?
のようなものに置き換えたい場合にはうまくいかないようです。
を参照してください:あなたは、このに興味がある可能性があり、PHPのXMLやJSONパーサーを使用しているときに呪われた「無効な文字」エラーに遭遇した場合はReplacing invalid UTF-8 characters by question marks, mbstring.substitute_character seems ignored
。
残念ながら、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
何をしますか?空白を取り除く?またはutf-8文字? 例を挙げてください。 –
UTF-8文字を取り除くのは簡単です: '$ text = '';' :-) – Joey