La razón de esto "se me escapa".
JSON escapa de la barra diagonal, por lo que un hash {a: "a/b/c"}
se serializa como en {"a":"a\/b\/c"}
lugar de {"a":"a/b/c"}
.
¿Por qué?
javascript
json
Jason S
fuente
fuente
json_encode()
escapa por barras diagonales por defecto, pero tiene laJSON_UNESCAPED_SLASHES
opción a partir de PHP 5.4.0 (marzo de 2012)'</'
:echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Respuestas:
JSON no requiere que hagas eso, te permite hacerlo. También le permite usar "\ u0061" para "A", pero no es obligatorio. Permitir
\/
ayuda al incrustar JSON en una<script>
etiqueta, que no permite</
cadenas internas, como señala Seb.Algunas de las API ASP.NET Ajax / JSON de Microsoft usan esta laguna para agregar información adicional, por ejemplo, se enviará una fecha y hora como
"\/Date(milliseconds)\/"
. (Qué asco)fuente
/
No se requiere escapar , está permitido , para facilitar el uso de JSON. Si no quieres escapar/
, entonces no lo hagas.La especificación JSON dice que PUEDES escapar de la barra diagonal, pero no tienes que hacerlo.
fuente
Hice la misma pregunta hace algún tiempo y tuve que responderla yo mismo. Esto es lo que se me ocurrió:
fuente
PHP escapa a las barras diagonales por defecto, lo que probablemente sea la razón por la que esto aparece con tanta frecuencia. No estoy seguro de por qué, pero posiblemente porque incrustar la cadena
"</script>"
dentro de una<script>
etiqueta se considera inseguro.Esta funcionalidad se puede deshabilitar pasando el
JSON_UNESCAPED_SLASHES
indicador, pero la mayoría de los desarrolladores no la usarán ya que el resultado original ya es JSON válido.fuente
PHP feo!
La
JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
opción debe ser predeterminada, no una opción (extraña) ... ¿Cómo decirlo a los desarrolladores php?El valor predeterminado DEBE ser el uso más frecuente y los estándares (actuales) más utilizados como UTF8. ¿Cuántos fragmentos de código PHP en Github u otro lugar necesitan esta característica exótica "incrustada en HTML"?
fuente
'\/' === '/'
devuelve verdadero. Le aconsejaría que se atendiera a los hechos. La mayoría de las personas pueden hacer frente a algunos nombres de funciones inconsistentes. El hecho de que no puedas ver el pasado no hace que PHP sea una mala herramienta.