Umlaute bei JSON_ENCODE()

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

  • 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?

    Comment


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

      Comment


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

        Comment


        • #5
          Danke!

          Comment

          Working...
          X