Wenn Sie "spezielle" Unicode-Zeichen verwenden, erscheinen sie als merkwürdiger Abfall, wenn sie in JSON codiert sind:
%Vor%Warum? Habe ich etwas falsch mit meinen Kodierungen gemacht?
(Dies ist eine Referenzfrage, um das Thema ein für allemal zu klären, da dies immer wieder auftaucht.)
Zuerst einmal: Hier ist nichts falsch. So können Zeichen in JSON codiert werden. Es ist in der offizielle Standard . Es basiert darauf, wie String-Literale in Javascript ECMAScript ( Abschnitt 7.8.4" Zeichenkettenliterale ") und wird wie folgt beschrieben:
Jeder Codepunkt kann als Hexadezimalzahl dargestellt werden. Die Bedeutung einer solchen Zahl wird durch ISO / IEC 10646 bestimmt. Wenn der Codepunkt in der Basic Multilingual Plane liegt (U + 0000 bis U + FFFF), dann kann er als sechsstellige Folge dargestellt werden: ein umgekehrter Solidus, gefolgt von dem Kleinbuchstaben u, gefolgt von vier hexadezimalen Ziffern, die den Codepunkt codieren. [...] So kann beispielsweise eine Zeichenkette, die nur ein einzelnes umgekehrtes Soliduszeichen enthält, als "\ u005C" dargestellt werden.
Kurz gesagt: Jedes Zeichen kann als \u....
codiert werden, wobei ....
der Unicode-Codepunkt des Zeichens (oder der Codepunkt der Hälfte eines UTF-16-Ersatzpaars für Zeichen außerhalb des BMP) ist.
Diese beiden Zeichenfolgenliterale stellen das exakt gleiche Zeichen dar, sie sind absolut äquivalent. Wenn diese Zeichenfolgenliterale von einem kompatiblen JSON-Parser analysiert werden, führen beide zu der Zeichenfolge "馬". Sie sehen nicht gleich aus, aber sie bedeuten dasselbe im JSON-Datencodierungsformat.
PHP json_encode
codiert vorzugsweise Nicht-ASCII-Zeichen mit \u....
Escape-Sequenzen. Technisch muss es nicht, aber es tut es. Und das Ergebnis ist absolut gültig. Wenn Sie anstelle von Escape-Sequenzen lieber Literalzeichen in Ihrem JSON haben möchten, können Sie das JSON_UNESCAPED_UNICODE
-Flag in PHP 5.4 oder höher setzen:
Um zu betonen: Dies ist nur eine Präferenz , es ist in keiner Weise notwendig, "Unicode-Zeichen" in JSON zu transportieren.