Codierungsfehler mit json_encode()

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Codierungsfehler mit json_encode()

    Ich konnte zu diesem Thema leider nichts spezifisches im Forum finden, aber vielleicht ist jemand auch schon auf ein solches Problem gestossen.

    Ich habe ein Array mit Variablen welche Umlaute enthalten:

    PHP Code:
    $Test = array(1=>"Zürich",2=>"Luzern",3=>"Genève",4=>"Winterthur"); 
    Gebe ich das Array mit print_r aus, stimmt die Anzeige:

    PHP Code:
    print_r($Test); 
    HTML Code:
    Array ( [1] => Zürich [2] => Luzern [3] => Genève [4] => Winterthur )
    Gebe ich das ganze mit json_encode aus funktioniert das leider nicht.

    PHP Code:
    echo json_encode($Test); 
    HTML Code:
    {"1":"Z\u00fcrich","2":"Luzern","3":"Gen\u00e8ve","4":"Winterthur"}
    Gibt es hier eine Möglichkeit dies zu verhindern ohne, die ungültigen Zeichen zu parsen und zu ersetzen?

  • #2
    JSON codierte Strings sind immer im UTF-8 Format. Du müsstest also alle Werte im Array vor der JSON Kodierung als UTF-8 bereitstellen.

    Die Funktion array_map() im Zusammenhang mit utf8_encode() dürfte Dir hier sehr viel weiter helfen.
    MM Newmedia | MeinBlog

    Comment


    • #3
      Originally posted by usany View Post
      HTML Code:
      {"1":"Z\u00fcrich","2":"Luzern","3":"Gen\u00e8ve","4":"Winterthur"}
      Gibt es hier eine Möglichkeit dies zu verhindern ohne, die ungültigen Zeichen zu parsen und zu ersetzen?
      Wie kommst du auf die Idee, dass das „ungültige“ Zeichen wären?

      Der „Datentyp“ char in JSON is u.a. definiert als \u four-hex-digits – das ist also eine vollkommen valide Variante, Zeichen in JSON zu kodieren, die bei der Übertragung andernfalls u.U. Probleme machen könnten.

      Und jeder funktionierende JSON-Parser übersetzt dir das anstandslos in die „richtigen“ Zeichen zurück … also was ist überhaupt dein konkretes Problem?


      P.S.: Ab PHP 5.4 gibt es die Konstante JSON_UNESCAPED_UNICODE, die man json_encode als Parameter übergeben kann – die sorgt dafür, dass Unicode-Zeichen außerhalb des mit ASCII identischen Bereiches nicht mehr auf diese Art und Weise kodiert werden, sondern direkt eingesetzt werden.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Comment


      • #4
        Mein konkretes Problem war, dass die Umlaute nicht korrekt angezeigt wurden. Ich lasse das JSON in ein <select> Formularfeld einlesen, und die Umlaute wurden nicht angezeigt. Jedoch lag das Problem am Javascript, dass das JSON nicht korrekt eingelesen hat.
        Danke für eure Antworten!.

        Comment

        Working...
        X