Heim > Backend-Entwicklung > PHP-Tutorial > Warum fügt „json_encode' Backslashes hinzu und wie kann ich das verhindern?

Warum fügt „json_encode' Backslashes hinzu und wie kann ich das verhindern?

Patricia Arquette
Freigeben: 2024-11-12 04:36:01
Original
361 Leute haben es durchsucht

Why does `json_encode` add backslashes and how can I prevent it?

Json_encode fügt Backslashes hinzu: Enthüllung des Geheimnisses

Im Bereich JavaScript ist json_encode seit langem ein vertrauenswürdiger Verbündeter für die Codierung von Daten in das JSON-Format . Einige Entwickler sind jedoch auf ein unerwartetes Phänomen gestoßen, bei dem json_encode Backslashes in die Ausgabe einfügt.

Das Upload-Rätsel

Ein solcher Fall tritt auf, wenn json_encode verwendet wird, um danach JSON-Daten zurückzugeben ein Datei-Upload. Betrachten Sie den folgenden Code:

print_r($result); // Associative array

$encoded_result = json_encode($result); // Valid JSON

echo $encoded_result;
Nach dem Login kopieren

Die unerklärlichen Backslashes

Zur Überraschung des Entwicklers enthält der resultierende JSON unerwünschte Backslashes:

{"logo_url":"http:\/\/mysite.com\/uploads\/gallery\/7f\/3b\/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
Nach dem Login kopieren

Den Täter ausfindig machen

Erste Untersuchungen ergaben, dass die Backslashes irgendwo zwischen json_encode und der Analyse der JSON-Daten durch den Browser eingefügt wurden.

alert(data.toSource()); // Result: invalid JSON with added "status:200"
Nach dem Login kopieren

Die versteckte Variable

Eine genauere Untersuchung ergab einen unerwarteten Übeltäter: das Plupload-Bindeereignis.

uploader.bind('FileUploaded', function(up, file, data) {
  alert(data.toSource());
  $('#' + file.id + " b").html("100%");
});
Nach dem Login kopieren

Plupload, eine beliebte Datei-Upload-Bibliothek, schien die zurückgegebenen Daten zu manipulieren, fügte hinzu die „status:200“-Eigenschaft und die Codierung der Schrägstriche.

Die Lösung: Den Schrägstrichen entkommen

Um die unerwünschten Backslashes zu verhindern, wurde der Code so geändert, dass er das „ Option „JSON_UNESCAPED_SLASHES“ im json_encode-Funktionsaufruf:

$encoded_result = json_encode($result, JSON_UNESCAPED_SLASHES);
Nach dem Login kopieren

Diese Option deaktiviert effektiv das Escapezeichen von Schrägstrichen, was zur gewünschten JSON-Ausgabe führt:

{"logo_url":"http://mysite.com/uploads/gallery/7f/3b/f65ab8165d_logo.jpeg","img_id":"54","feedback":{"message":"File uploaded","success":true}}
Nach dem Login kopieren

Enthüllung der Wahrheit

Zusammenfassend lässt sich sagen, dass das Hinzufügen von Backslashes in der json_encode-Ausgabe auf die unbeabsichtigte Manipulation von Daten durch das Plupload-Bindeereignis zurückzuführen ist. Durch die Integration der Option „JSON_UNESCAPED_SLASHES“ können Entwickler verhindern, dass dieses unerwünschte Escape-Zeichen ihre JSON-Daten beeinträchtigt.

Das obige ist der detaillierte Inhalt vonWarum fügt „json_encode' Backslashes hinzu und wie kann ich das verhindern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage