A razão para isso "me escapa".
O JSON escapa da barra, portanto, um hash {a: "a/b/c"}
é serializado como em {"a":"a\/b\/c"}
vez de {"a":"a/b/c"}
.
Por quê?
javascript
json
Jason S
fonte
fonte
json_encode()
escapa barras por padrão, mas tem aJSON_UNESCAPED_SLASHES
opção a partir de PHP 5.4.0 (Março de 2012)'</'
:echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Respostas:
O JSON não exige que você faça isso, ele permite que você faça isso. Também permite usar "\ u0061" para "A", mas não é obrigatório. Permitir
\/
ajuda ao incorporar JSON em uma<script>
tag, o que não permite</
strings internas, como Seb aponta.Algumas APIs ASP.NET Ajax / JSON da Microsoft usam essa brecha para adicionar informações extras, por exemplo, um datetime será enviado como
"\/Date(milliseconds)\/"
. (Que nojo)fonte
/
não é necessário , é permitido , para facilitar o uso de JSON. Se você não quiser fugir/
, não faça.A especificação JSON diz que você pode escapar da barra, mas não precisa.
fonte
Eu fiz a mesma pergunta há algum tempo e tive que responder pessoalmente. Aqui está o que eu vim com:
fonte
O PHP escapa as barras dianteiras por padrão, e é provavelmente por isso que isso aparece com tanta frequência. Não sei por que, mas possivelmente porque a incorporação da corda
"</script>"
dentro de um<script>
tag é considerada insegura.Essa funcionalidade pode ser desativada passando a
JSON_UNESCAPED_SLASHES
flag, mas a maioria dos desenvolvedores não a usará, pois o resultado original já é JSON válido.fonte
PHP feio!
O
JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
deve ser padrão, não é uma opção (estranho) ... como dizê-lo para o PHP-desenvolvedores?O padrão DEVE ser o uso mais frequente e os padrões (atuais) mais amplamente utilizados como UTF8. Quantos fragmentos de código PHP no Github ou em outro local precisam desse recurso exótico "incorporado em HTML"?
fonte
'\/' === '/'
retorna true. Eu aconselho você a se ater aos fatos. A maioria das pessoas consegue lidar com alguns nomes de funções inconsistentes. Só porque você não pode ver o passado que não faz do PHP uma ferramenta ruim.