web-dev-qa-db-ja.com

フランス語のアクセントで配列をjson_encodeする方法は?

フランス語のアクセントを持つ配列項目があります([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オプションを試しましたが、成功しませんでした。助言がありますか?

ありがとうございました。

25
Natkeeran

json_encodeutf-8。文字セットに応じて、iconvまたは utf8_encodebeforeを呼び出す前に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);

});
17
Wrikken

これがそれに対処する最も簡単な方法であることがわかりました

echo json_encode($array, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

JSON_PRETTY_PRINT-読み取り可能にする
JSON_UNESCAPED_UNICODE-文字を正しくエンコードします
JSON_UNESCAPED_SLASHES-エスケープスラッシュ「\」を削除します
これらのオプションはパイプ「|」で区切られていることにも注意してください

32
Pete

別の解決策は htmlentities または utf8_encode 使用する前に json_encode エンコードされた文字を渡す

このような:

   $array = array('myvalue' => utf8_encode('ééàà'));
   return json_encode($array);

またはhtmlentitiesを使用:

   $array = array('myvalue' => htmlentities('ééàà'));
   return json_encode($array);
11
sdespont
<? 

$sql=mysql_query("SELECT * FROM TABLE...");

while($row=mysql_fetch_array($sql))
{
    $output[]=array_map("utf8_encode", $row);
}
print(json_encode($output));
mysql_close();

?>
4
Mike Bryant

分音符号を扱う場合は、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);
1
mihaidp
$json = utf8_encode($string);

$json = json_decode($json);
1
Ali Mhamad Slim

PHPドキュメント

この関数は、UTF-8でエンコードされたデータでのみ機能します。

1
AlienWebguy