Codierungsfehler mit json_encode()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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

    Kommentar


    • #3
      Zitat von usany Beitrag anzeigen
      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.

      Kommentar


      • #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!.

        Kommentar

        Lädt...
        X