Por que os caracteres de escape são adicionados ao valor da input oculta

 

Quando o formulário é publicado, a seguinte string é exibida entre as tags div.

{\ “field0 \”: \ “Eu sou uma string \”, \ “field1 \”: 84, \ “field3 \”: \ “então eu estou \”}

Por que os caracteres de escape estão sendo adicionados? Eles estão sendo adicionados pelo servidor PHP ou pelo cliente da Web? Posso fazer qualquer coisa para evitar isso?

Alguém já mencionou as barras de tira da function PHP. Eu estou usando isso por enquanto, mas eu quero me livrar das barras todas juntas.

Verifique se a sua configuração do PHP tem magic_quotes_gpc ativada, no caso em que o servidor PHP adiciona barras automaticamente aos valores GET / POST / cookie …

Eu acredito que o problema é apenas um de fugir feito pelas ferramentas que você está usando para produzir a string. Por exemplo:

 var msg = dojo.toJson({field1: 'string', field2: 84, field3: 'another string'}); alert(msg); 

mostrará as aspas duplas como não modificadas. Da mesma forma, executando seu primeiro exemplo enquanto o navegador é conectado a um proxy como Charles, mostra o duplo qoutes como não modificado.

Então eu acredito que isso é apenas um escape automático que o Firebug / PHP faz ao mostrar suas cordas.

Se a informação estiver correta quando deixar o cliente, o dojo deve estar fazendo alguma feitiçaria antes de enviar a informação para $ _POST, não? Existem bandeiras que você pode definir para o método dojo.toJson () que permitirá que você controle o nível de manipulação / escape de seqüência de input? Caso contrário, acho que usar stripslashes () (ou o que for, dependendo de onde essa informação é dirigida) é a única resposta.

Verifique se aspas mágicas estão ativadas no seu host

Provavelmente você tem magic_quotes_gpc habilitado em seu servidor. Esta opção de configuração e recurso está obsoleta no php5.3. Até você atualizar:

 if (get_magic_quotes_gpc()) { set_magic_quotes_runtime(0); foreach (array('POST', 'GET', 'REQUEST', 'COOKIE') as $gpc) $GLOBALS["_$gpc"] = array_map('dequote', $GLOBALS["_$gpc"]); } function dequote($v) { return is_array($v) ? array_map('dequote', $v) : stripslashes($v); } 

A solução acima é baseada no código de alguém que encontrei há alguns anos atrás.