JSON kodieren dekodieren

wenco

Erfahrenes Mitglied
Ich verarbeite Daten mit json_encode / json_decode.
Solange ich nichts in die DB schreibe funktioniert das auch tadellos, aber schreibe ich die Daten in die DB, dann werden die Backslashes bei den Umlauten elimiert. Statt "\u00e4" für ä steht in der DB nur "u00e4" und so wird beim Zurückwandeln das ä nicht mehr erkannt...

Was mache ich falsch? Kennt jemand dieses Problem?
 
Mh, du könntest versuchen das Slash beim Speichern zu maskieren, also jedem Slash ein weiteres Slash voranstellen:
PHP:
# speichern
$encoded = str_replace('\\\\', '\\', json_encode($string));

# laden
$decoded = json_decode($string);
 
Hi,
danke für Eure Antworten.
Es war tatsächlich das real_escape_string. Allerdings hatte ich es nicht vergessen!

Ich habe sogar extra eigene Funktionen die ich standardmäßig zur Formular-Verarbeitung / und DB-Schreiben benutze und ich weiß nicht warum,

aber das geht:
$mysqli->real_escape_string(json_encode($meinevariable))

aber das geht nicht:
meinefunktion(json_encode($meinevariable))

Dabei enthält meine Funktion nichts anderes als eben $mysqli->real_escape_string und ich hatte noch nie Probleme...

Hat das mit json zu tun?
 
Zuletzt bearbeitet:
Vermutlich hat deine eigene Funktion nicht die Backslashes maskiert. Denn real_escape_string macht mehr, als in der Dokumentation steht. Es passt auf, dass bereits enthaltende Backslashes maskiert werden, um nicht vor der Übertragung aufgelöst zu werden. (Wie es bei Dir der Fall war)
 
Klar liegts an mir...
Ich mache da an einer Stelle ein stripslashes wegen meiner Ausgaben und dem 1&1 magic_quotes_gpc, das entfernt vorher schon den Backslash bei "\u00e4", der dann -logisch- auch nicht mehr maskiert werden kann... Musste doch ein Erklärung geben :)

Danke und schönen Abend!
 
Zurück