Qualcuno può spiegare questo codice PHP usando json_encode e json_decode?

StackOverflow https://stackoverflow.com/questions/127739

  •  02-07-2019
  •  | 
  •  

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ù.

È stato utile?

Soluzione

Perché fa parte dello standard JSON

http://json.org/

  

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top