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
Patricia ArquetteOriginal
2024-11-12 04:36:01362Durchsuche

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;

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}}

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"

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%");
});

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);

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}}

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!

Stellungnahme:
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