5

私は3時間ほど探し回っていて、このような質問がすでにたくさんあることは知っていますが、アクセント付きの文字を出力しようとしたときに問題が解決する解決策は見つかりませんでした私のデータベースに対するSELECTクエリによる結果。

 $itemsList = array();
 while($row = mysql_fetch_assoc($res)){
    $itemsList[Items][] = ($row);
 }
 echo json_encode($itemsList);

これは出力します:

{"Items":  [

{"user_name":"misterP", 

"comment":"\u00c3\u00a9t\u00c3\u00a9",

"image_name":"403885300736874.jpg"}]}

しかし、私は次のようにアクセントを出力する必要があります:

{"Items":  [

{"user_name":"misterP", 

"comment":"été",

"image_name":"403885300736874.jpg"}]}
  • 私のデータベースとテーブルにはクラス間utf8_general_ciがあります
  • 私のデータベースに挿入されたデータはutf8_encodedです
  • 私のphpスクリプトはUnicode(UTF-8)です
  • データベースのSELECTの前に"mysql_set_charset('utf8');"を実行しました
  • これが誰かを助けることができるなら:yデータベースでは、単語「été」は:「été」です

だから私は今何をすべきか本当にわかりません、私は本当にアクセントに固執していて、それを機能させることができません。前もって感謝します !

4

1 に答える 1

7

それは本当に問題ではありません。jsonがデコードされると、それらは再び文字になります。

php 5.4> =を使用する場合は、次のパスに渡すことができJSON_UNESCAPED_UNICODEますjson_encode

json_encode( $data, JSON_UNESCAPED_UNICODE )

しかし、繰り返しになりますが、Unicodeエスケープも同様に機能し、データASCIIを安全にします。

編集:

以前でも、データはすでにねじ込まれているようjson_encodeです。utf-8のように「二重エンコード」されています。

私のデータベースに挿入されたデータはutf8_encodedです

のようなものを使用していますutf8_encodeか?データベースに挿入するときに、コードで何もする必要はありません。を使用してデータベースにデータを挿入した場合utf8_encode、それはダブルエンコーディングを説明しています。必要なのは、データがutf-8であり、mysql_set_charset( 'utf8' )挿入する前に持っていることだけです。


jsonにエスケープされていないユニコードがある場合、jsonにまたはが含まれている場合は括弧を追加しても、jsonをjavascriptとして実行できないことを知っておくことは興味深いことです。U+2028U+2029

于 2012-12-11T18:34:03.110 に答える