Umlaute bei JSON_ENCODE()

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

  • Umlaute bei JSON_ENCODE()

    Moin liebe Helferinnen und Helfer,

    vermutlich eine einfache Frage, aber meine bisherigen, langwierigen Recherchen waren nicht sehr befriedigend.

    Mein Skript unten liefert folgende Ausgabe:

    ---------------------------------------------------------------------------------------------------------------------------------------------------------
    Array ( [0] => ä [1] => ö [2] => ü [3] => Ä [4] => Ö [5] => Ü [6] => ß [7] => % [8] => $ [9] => § [10] => . )
    JSON-AUSGABE:
    ["\u00e4","\u00f6","\u00fc","\u00c4","\u00d6","\u00dc","\u00df","%","$","\u00a7","."]
    ---------------------------------------------------------------------------------------------------------------------------------------------------------

    Das Skript ist als UTF-8 ohne BOM gespeichert.
    Ich frage mich jetzt, was eigentlich herauskommen sollte. Müssten im JSON-Part jetzt die uns bekannten Umlaute auftauchen, oder erkennt ein abrufendes Skript das Ergebnis als korrektes JSON an?
    Hintergrund: Das ganze soll eine simple Schnittstelle werden.
    Ich hätte jetzt erwartet, dass im JSON-Part ebenfalls die Umlaute auftauchen müssten.

    Könnt Ihr helfen?

    PHP-Code:
    <?php
    header
    ("Content-Type: text/html; charset=utf8");

    ### Array aus Umlauten und Sonderzeichen
    $arr = array('ä''ö''ü''Ä''Ö''Ü''ß''%''$''§''.');
    print_r($arr);

    ### JSON-Ausgabe
    echo "<br /><br />JSON-AUSGABE: <br />";
    echo ( 
    json_encode($arr) );


    ?>

  • #2
    Was genau ist jetzt die Frage? Wie JSON funktioniert? Das kann man nachlesen.

    Und wenn du dir unsicher bist, ob aus dem JSON-String wieder der korrekte Wert ausgelesen werden kann, dann brauchst du es ja nur mal dekodieren, und siehst dann eh, ob es passt oder nicht?

    Kommentar


    • #3
      Danke, der Hinweis führt mich schon mal weiter.

      Das ganze ist viel komplexer und ich tue mich noch schwer, die Frage richtig zu formulieren.

      Kommentar


      • #4
        Du kannst per Parameter festlegen, wie json_encode() Sonderzeichen konvertieren soll:
        PHP-Code:
        $values = ['ä''ö''ü'];

        echo 
        json_encode($values);
        // ["\u00e4","\u00f6","\u00fc"]

        echo json_encode($valuesJSON_UNESCAPED_UNICODE);
        // ["ä","ö","ü"] 
        Richtig und gültig ist beides. Ein JSON-Decoder muss beide Varianten dekodieren können. Die erste Variante ist wohl stabiler, weil es kaum eine Möglichkeit gibt die Zeichenkodierung kaputt zu machen. Für Menschen lesbarer und kürzer ist die zweite Variante. Nur bei dieser sollte konsequente auf die Verwendung von UTF-8 geachtet werden.

        Kommentar


        • #5
          Danke!

          Kommentar


          • #6
            Concrete Patios Lancaster

            Thank you for sharing information on this forum. Concrete Patios

            Kommentar

            Lädt...
            X