Alguém pode explicar esse código PHP usando json_encode e json_decode?

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

  •  02-07-2019
  •  | 
  •  

Pergunta

  $a = '{ "tag": "<b></b>" }';
  echo json_encode( json_decode($a) );

Esta saídas:

{"tag":"<b><\/b>"}

quando você pensaria que seria a saída exatamente a entrada. Por alguma razão json_encode adiciona uma barra extra.

Foi útil?

Solução

Porque é parte do padrão JSON

http://json.org/

caractere

any-Unicode-character-
    except-"-or-\-or-
    control-character
\"
\\
\/ <---- see here?
\b
\f
\n
\r
\t
\u four-hex-digits

Outras dicas

usar este:

echo json_encode($a,JSON_HEX_TAG)

resultado será:

["\u003C\u003E"]

Você pode ler este artigo para melhorar o seu conhecimento sobre json_encode http://php.net/manual/en/function.json-encode. php

Isso é provavelmente a-recurso de segurança. A versão escapou (Ex. A saída) seria analisado como semelhante ao unescaped-versão, Javascript (Ex. \/ se torna /). Tendo escapado a barra assim, há uma menor chance do navegador interpretando mal o Javascript-string como HTML. Claro, se você tratar os dados corretos, isso não deve ser necessário, por isso é mais uma salvaguarda contra um programador nora atrapalhando as coisas para si mesmo.

Sua entrada não é válida JSON, mas parser JSON de PHP (como a maioria dos analisadores JSON) irá analisá-lo de qualquer maneira.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top