Wie entferne ich den Backslash in der Funktion json_encode()?
Lesezeit: 4 Minuten
Ryan
So entfernen Sie die (\)Backslash auf einer Zeichenfolge? beim Benutzen echo json_encode() ?
Zum Beispiel:
<?php
$str = "$(\"#output\").append(\"<p>This is a test!</p>\")";
echo json_encode($str);
?>
Hinweis: Wenn Sie $str echoen, gibt es kein Problem … aber wenn Sie echo out using verwenden json_encode()das (\)Backslash wird angezeigt.
Gibt es eine Möglichkeit, dies zu lösen?
Ich stieß auf die gleichen Probleme und stellte sich heraus, dass ich es benutzte json_encode zweimal auf die gleichen Daten, das war eigentlich das Hinzufügen der Backslashes.
– eozzy
29. Juni 2015 um 2:19 Uhr
JSON erfordert, dass Anführungszeichen in den Daten mit Backslashes maskiert werden, wenn es das also tut, funktioniert es richtig. Aber warum codieren Sie eine Zeichenfolge in JSON?
– nnnnn
16. Februar 2016 um 12:50 Uhr
Rijk
json_encode($response, JSON_UNESCAPED_SLASHES);
Und ich möchte es nur auf Ajax zurücksenden. Ich möchte nur, dass der Prozess auf PHP und nicht auf Javascript ausgeführt wird.
– Ryan
2. September 2011 um 11:57 Uhr
Entschuldigung … wie ist das die “richtige” Antwort? JSON wird jetzt überall verwendet, nicht nur in Javascript … es ist einfach eine Möglichkeit, Daten zu serialisieren. PHP verpfuscht dies (zusammen mit so vielem anderen), indem es völlig überflüssige Fluchtzeichen zu Anführungszeichen hinzufügt, die sie nicht haben sollten! Die DATEN sollten Escapezeichen haben, nicht die Anführungszeichen, die die Daten umschließen! Und wie es passiert, ist es wichtig, diese Anführungszeichen zu entfernen, damit dies richtig funktioniert, da maskierte Anführungszeichen NICHT Teil von JSON sind. also… wie macht man das??
– Jewgeni Simkin
12. Januar 2013 um 22:54 Uhr
Stimme dem obigen Kommentator zu. In der Welt der Softwareentwicklung gibt es viele Grenzfälle. Dies ist keine Antwort.
– cmal
16. August 2014 um 14:33 Uhr
Wenn Sie den json tatsächlich mit Backslashes in jsonlint einfügen, wird ein ungültiger json zurückgegeben. Ich glaube auch nicht, dass das die richtige Antwort ist.
– Trichter
4. Mai 2015 um 8:18 Uhr
JSON_UNESCAPED_SLASHES ist für Schrägstriche, nicht für Anführungszeichen. zB \/diese\/Schrägstriche\/sind\/das\/Ziel — nicht \”diese\”Anführungszeichen\”sind\”nicht\”das\”Ziel
– Bob
9. August 2017 um 18:52 Uhr
Entwickler87
Seit PHP 5.4 gibt es Konstanten, die von verwendet werden können json_encode() um die json-Antwort wie gewünscht zu formatieren.
Verwenden Sie zum Entfernen von Backslashes: JSON_UNESCAPED_SLASHES. So:
json_encode($response, JSON_UNESCAPED_SLASHES);
Weitere Konstanten und weitere Informationen finden Sie in der PHP-Dokumentation:
@joryl Die Konstante sollte seit 5.4 verfügbar sein, also sollte sie auch in neueren Versionen funktionieren
– Entwickler87
16. Februar 2016 um 12:37 Uhr
Danke für die Antwort 🙂 Es sollte zum Beispiel in 5.5 funktionieren? Wenn nicht, warum haben sie es entfernt? Und was ist die Alternative in neueren Versionen als 5.4?
– Joryl
16. Februar 2016 um 12:45 Uhr
@joryl Es sollte mit 5.4+ funktionieren. Sehen Sie ein Problem bei der Verwendung in einer neueren Version von PHP?
– Entwickler87
17. Februar 2016 um 17:28 Uhr
Das habe ich gerade in PHP 5.6 entdeckt JSON_UNESCAPED_SLASHES funktioniert gut für Schrägstriche, tut aber nichts für Backslashes
– Gawpertron
7. Juni 2016 um 13:34 Uhr
Wenn Sie PHP 5.2 verwenden, erwartet json_encode beim Aufruf nur 1 Parameter. Dies ist eine Alternative zum Unescape-Schrägstrich von json-Werten:
stripslashes(json_encode($array))
Verwenden Sie es nicht, wenn Ihre Daten kompliziert sind.
Sie müssen hier jedoch äußerst vorsichtig sein, da Sie sicherstellen müssen, dass alle Ihre Werte in Anführungszeichen gesetzt sind (was im Allgemeinen sowieso zutrifft, aber besonders jetzt, da Sie alle Escapezeichen von PHPs idiotischem (und dysfunktionalem) “Helfer” entfernen werden ” Funktionalität zum Hinzufügen unnötiger Backslashes vor all Ihren Objekt-IDs und Werten).
Daher maskiert php standardmäßig Ihre Werte, die ein Anführungszeichen enthalten, also wenn Sie einen Wert von haben My name is "Joe" In Ihrer DB bringt PHP dies zurück als My name is \\"Joe\\".
Dies kann für Sie nützlich sein oder auch nicht. Wenn dies nicht der Fall ist, können Sie den zusätzlichen Schritt unternehmen, den führenden Schrägstrich dort wie folgt zu ersetzen:
Ich stieß auf die gleichen Probleme und stellte sich heraus, dass ich es benutzte
json_encode
zweimal auf die gleichen Daten, das war eigentlich das Hinzufügen der Backslashes.– eozzy
29. Juni 2015 um 2:19 Uhr
JSON erfordert, dass Anführungszeichen in den Daten mit Backslashes maskiert werden, wenn es das also tut, funktioniert es richtig. Aber warum codieren Sie eine Zeichenfolge in JSON?
– nnnnn
16. Februar 2016 um 12:50 Uhr