Wie entferne ich den Backslash in der Funktion json_encode()?

Lesezeit: 4 Minuten

Benutzer-Avatar
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


Benutzer-Avatar
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

Benutzer-Avatar
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:

http://php.net/manual/en/function.json-encode.php

Liste der JSON-Konstanten:

http://php.net/manual/en/json.constants.php

  • Sollte seit 5.4 verfügbar sein? Sehen hier

    – Aug

    29. September 2015 um 1:44 Uhr

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

Benutzer-Avatar
Jewgeni Simkin

die Lösung, die funktioniert, ist diese:

$str = preg_replace('/\\\"https://stackoverflow.com/","\"", $str);

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:

$str = preg_replace('/\\\\\"https://stackoverflow.com/","\"", $str);

ja … es ist hässlich … aber es funktioniert.

Sie haben dann etwas übrig, das dem tatsächlichen JSON vage ähnelt.

Einfacher wäre

$mystring = json_encode($my_json,JSON_UNESCAPED_SLASHES);

Benutzer-Avatar
Gesamtheit

Das habe ich gerade herausgefunden json_encode entgeht nur \n wenn es in einfachen Anführungszeichen verwendet wird.

echo json_encode("Hello World\n");
// results in "Hello World\n"

Und

echo json_encode('Hello World\n');
// results in "Hello World\\\n"

Benutzer-Avatar
Yeroon

Ja es ist möglich. Aussehen!

$str = str_replace('\\', '', $str);

Aber warum willst du das?

1298400cookie-checkWie entferne ich den Backslash in der Funktion json_encode()?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy