データ配列にjson_encode($data)
を使用していますが、ロシア語の文字を含むフィールドがあります。
このmb_detect_encoding()
を使用して、そのフィールドのエンコードを表示し、UTF-8を表示します。
Jsonエンコードは、 "ра▒"のような悪い文字が原因で失敗したと思います。データに対してutf8_encode
をたくさん試してみましたが、そのエラーはパスしますが、データはもう正しく見えません。
この問題で何ができますか?
問題は、それらのほとんどがutf8文字であるにもかかわらず、内部にいくつかの非utf8文字がある場合に発生します。これにより、utf8以外の文字が削除され、機能するようになります。
$data['name'] = mb_convert_encoding($data['name'], 'UTF-8', 'UTF-8');
JSON形式でエンコードする多次元配列がある場合、以下の関数を使用できます。
JSON_ERROR_UTF8が発生した場合:
$encoded = json_encode( utf8ize( $responseForJS ) );
以下の関数は、配列データを再帰的にエンコードするために使用されます
/* Use it for json_encode some corrupt UTF-8 chars
* useful for = malformed utf-8 characters possibly incorrectly encoded by json_encode
*/
function utf8ize( $mixed ) {
if (is_array($mixed)) {
foreach ($mixed as $key => $value) {
$mixed[$key] = utf8ize($value);
}
} elseif (is_string($mixed)) {
return mb_convert_encoding($mixed, "UTF-8", "UTF-8");
}
return $mixed;
}
Utf8としてcharset isoを使用してPdoオブジェクトを開始してください。これは、再utf8izingダンスを回避するこの問題を修正するはずです。
$pdo = new PDO("mysql:Host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
pdo接続に追加するだけですcharset = utf8以下のようなpdo接続の行:
$pdo = new PDO("mysql:Host=localhost;dbname=mybase;charset=utf8", 'user', 'password');
これがあなたの助けになることを願っています
JSONエンコードの前にHTMLエンティティを削除します。 ISはhtml_entity_decode()をPHPで使用し、問題は解決しました。
$json = html_entity_decode($source);
$data = json_decode($json,true);