フランス語のアクセントを持つ配列項目があります([WIPDescription] => Recette SoupeàlOignon Sans Boeuf US)。データはデータベース(mysql)から適切にプルされています。
ただし、json_encodeに組み込まれたphpを使用してこれをjsonとしてエンコードしようとすると、null json値が生成されます(OS Xサーバー:php 5.3.4、json 1.2.1が有効)。
Linuxサーバーでは、説明は最初のアクセント文字の後に切り捨てられます。
すべてのjson_encodeオプションを試しましたが、成功しませんでした。助言がありますか?
ありがとうございました。
json_encode
はutf-8
。文字セットに応じて、iconv
または utf8_encode
beforeを呼び出す前にjson_encode
を変数に追加します。おそらくarray_walk_recursive
。
要求に応じて、未完成の方法で配列を変更し、(1)オブジェクトが含まれていない、(2)配列のキーを想定ascii /下限にあるため、そのままにしておくことができます。
$current_charset = 'ISO-8859-15';//or what it is now
array_walk_recursive($array,function(&$value) use ($current_charset){
$value = iconv('UTF-8//TRANSLIT',$current_charset,$value);
});
これがそれに対処する最も簡単な方法であることがわかりました
echo json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
JSON_PRETTY_PRINT-読み取り可能にする
JSON_UNESCAPED_UNICODE-文字を正しくエンコードします
JSON_UNESCAPED_SLASHES-エスケープスラッシュ「\」を削除します
これらのオプションはパイプ「|」で区切られていることにも注意してください
別の解決策は htmlentities
または utf8_encode
使用する前に json_encode
エンコードされた文字を渡す
このような:
$array = array('myvalue' => utf8_encode('ééàà'));
return json_encode($array);
またはhtmlentities
を使用:
$array = array('myvalue' => htmlentities('ééàà'));
return json_encode($array);
<?
$sql=mysql_query("SELECT * FROM TABLE...");
while($row=mysql_fetch_array($sql))
{
$output[]=array_map("utf8_encode", $row);
}
print(json_encode($output));
mysql_close();
?>
分音符号を扱う場合は、JSON_PARTIAL_OUTPUT_ON_ERRORを追加することもできます。これにより、問題のみが削除され、残りはそのまま残ります。これを見つける前にutf_encodeを使用しましたが、発音区別符号がめちゃくちゃでした。
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PARTIAL_OUTPUT_ON_ERROR);
$json = utf8_encode($string);
$json = json_decode($json);
この関数は、UTF-8でエンコードされたデータでのみ機能します。