2

jsonでエンコードされ、データベースに保存されている配列があります。私のphpファイルはすべてutf8であり、私のmysqlデータベースはutf8_general_ciです。

私の配列には、json_encodeが\u文字に変換する強調文字を含む可能性のある名前が含まれています。この配列は私のデータベースに保存されます。jQuery.parseJSONを使用すると、強調された文字が正しく表示されます。

info = jQuery.parseJSON(data);
console.log(info);

//"Bob Épine" which is good

しかし、PHPでjson_decodeを使用したい場合、\u文字は残ります。

print_r($this->opts['name']);
echo $this->opts['name'];

//Bob \u00c9pine
//Bob u00c9pine

私はこの関数PHPを見つけました:json文字列の\ u文字を置き換えます、これは行く方法ですか?動作しますが、修正するのではなく、問題を回避しているようです。

4

2 に答える 2

2

まず、JSONをDBテーブルに格納することは、欠陥のあるアプリケーション設計のように聞こえますが、それを少しの間取っておきます...

これは私にはボビーテーブルの領土のように聞こえます。\つまり、データベースにデータを挿入するときに、エスケープしていないように聞こえます。これは、文字列から削除されていることを意味します。したがって、最終的には、uxxxxの代わりに\uxxxxなります。つまり、デコードできません。

現在、これを回避する方法は多種多様ですが、最初に行う必要があるのは、データがデータベースに正しく挿入されていること、およびエンコードされたJSON文字列が出力されたときと同じであることを確認することです。これを行っても問題が解決しない場合は、しばらく前に作成した関数を使用して、ユニコードコードポイントをバイナリ表現に変換します(これは私が見つけたばかりです) 。

于 2012-08-07T20:57:32.353 に答える
1

PHP json_decodeは、すべてではないにしても、一部のUTF-8非ASCII文字(> 1バイト)ではうまく機能しません。protocol.jsで、すべての非ASCII文字をエンコードする新しいJSONエンコード関数を追加する必要がありました(そのコードはもうありません)。

phpjsライブラリのjson_encodeを試してください。

于 2012-08-07T20:56:30.750 に答える