Qualcuno può spiegare questo codice PHP usando json_encode e json_decode?
Domanda
$a = '{ "tag": "<b></b>" }';
echo json_encode( json_decode($a) );
Questo output:
{"tag":"<b><\/b>"}
quando penseresti che produrrebbe esattamente l'input. Per qualche motivo json_encode aggiunge una barra in più.
Soluzione
Perché fa parte dello standard JSON
char
any-Unicode-character- except-"-or-\-or- control-character \" \\ \/ <---- see here? \b \f \n \r \t \u four-hex-digits
Altri suggerimenti
usa questo:
echo json_encode($a,JSON_HEX_TAG)
Il risultato sarà:
["\u003C\u003E"]
Puoi leggere questo articolo per migliorare le tue conoscenze su JSON_ENCODE http://php.net/manual/en/function.json-encode. php
Questa è probabilmente una funzione di sicurezza. La versione con escape (ad es. L'output) verrebbe analizzata come simile alla versione senza escape, da Javascript (ad es. \ /
diventa /
). Dopo essere sfuggito alla barra in questo modo, c'è una minore possibilità che il browser fraintenda la stringa Javascript come HTML. Ovviamente, se trattate i dati corretti, questo non dovrebbe essere necessario, quindi è più una protezione contro un programmatore indifferente che fa confusione tra di sé.
Il tuo input non è JSON valido, ma il parser JSON di PHP (come la maggior parte dei parser JSON) lo analizzerà comunque.