Alguém pode explicar esse código PHP usando json_encode e json_decode?
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.
Solução
Porque é parte do padrão JSON
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.