¿Alguien puede explicar este código PHP usando json_encode y json_decode?
Pregunta
$a = '{ "tag": "<b></b>" }';
echo json_encode( json_decode($a) );
Esto produce:
{"tag":"<b><\/b>"}
cuando pensarías que generaría exactamente la entrada. Por alguna razón, json_encode agrega una barra adicional.
Solución
Porque es parte del estándar JSON
char
any-Unicode-character- except-"-or-\-or- control-character \" \\ \/ <---- see here? \b \f \n \r \t \u four-hex-digits
Otros consejos
usa esto:
echo json_encode($a,JSON_HEX_TAG)
El resultado será:
["\u003C\u003E"]
Puedes leer este artículo para mejorar tu conocimiento sobre JSON_ENCODE http://php.net/manual/en/function.json-encode. php
Esa es probablemente una característica de seguridad. La versión de escape (por ejemplo, la salida) se analizaría como similar a la versión sin escape, por Javascript (por ejemplo, \ /
se convierte en /
). Habiendo escapado de la barra así, hay menos posibilidades de que el navegador malinterprete la cadena de Javascript como HTML. Por supuesto, si trata los datos correctamente, esto no debería ser necesario, por lo que es más una protección contra un programador despistado que arruina las cosas por sí mismo.
Su entrada no es JSON válida, pero el analizador JSON de PHP (como la mayoría de los analizadores JSON) lo analizará de todos modos.