0

現在、次のユニコード文字列がデータベースに保存されています。

\u4ece\u4e0b\u5468\u4e00\u8d77\uff0c\u5947\u5f02

PHP経由でApple APNSサーバーに送信すると、iPhoneで正しく表示されます。ただし、これらの文字 (漢字) を Web サイトに表示したい場合、漢字ではなく、純粋に \u4ece\u4e0b\u5468\u4e00\u8d77\uff0c\u5947\u5f02 として表示されます。

それらを正しく表示する方法を教えてくれる人はいますか?

4

1 に答える 1

3

それは「Unicode」ではなく、Unicode エスケープ シーケンスです。これ: "下" は Unicode 文字です。これ: "\u4e0b" は文字列"backslash you four ee zero bee"です。1そのエスケープ シーケンスをまったく同じように JSON に入れると、JSON がデコードされたときにたまたま正しい文字に解決されます。これは、そのエスケープ シーケンスがたまたま JSON で使用されているためです。ただし、これは別の問題を示唆しています。それは、次のように手動で JSON を作成しているということです。

$apns = "{\"message\":\"$unicodeEscape\"}";

そうしないでください。選択したプログラミング言語でネイティブ配列を作成し、JSON エンコードします。

$apns = json_encode(array('message' => '从下周一起,奇异'));

現在これを行っている場合、文字列コンテンツは元のコンテンツを保持するために正しく JSON エスケープされるため、文字列は iPhone でも "\u4ece..." として表示されます。

HTML にとって、これらのエスケープ シーケンスはそもそも特別な意味を持っているわけではありません。もちろん、漢字を表しているわけでもありません。

特定のコンテキストでのみ関連するエスケープ シーケンスではなく、UTF-8 などでエンコードされた実際の漢字をデータベースに格納します。

詳細については、 http://kunststube.netのほとんどの記事を読むことをお勧めします。


これらは明らかに JSON エスケープであるため、現在の形式から元に戻す最も簡単な方法は、JSON として解析することです。

$string = json_decode("\"$string\"");

もちろん、JSON構文を無効にするようなものが文字列に含まれていない場合にのみ機能します"それ以外の場合は、このソリューションを適応させることができます。


1 (これらの文字はそれぞれ Unicode で表すことができるため、この文字列も「Unicode 文字」で構成されます。)

于 2012-11-01T07:52:21.970 に答える