Como posso enviar o caractere “&” (E comercial) via AJAX?

Eu quero enviar algumas variables ​​e uma string com o método POST do JavaScript. Eu recebo a string do database e, em seguida, enviá-lo para uma página do PHP. Eu estou usando o object XMLHttpRequest. O problema é que a string contém o caractere “&” algumas vezes, e a matriz $ _POST no PHP a vê como várias chaves. Eu tentei replace o “&” com “\ &” com a function replace (), mas não parece fazer nada. Alguém pode ajudar?

O código javascript e a string são assim:

var wysiwyg = dijit.byId("wysiwyg").get("value"); var wysiwyg_clean = wysiwyg.replace('&','\&'); var poststr = "act=save"; poststr+="&titlu="+frm.value.titlu; poststr+="&sectiune="+frm.value.sectiune; poststr+="&wysiwyg="+wysiwyg_clean; poststr+="&id_text="+frm.value.id_text; xmlhttp.open("POST","lista_ajax.php",true); xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); xmlhttp.send(poststr); 

String é:

  "Busola" 

Você pode usar encodeURIComponent () .

Ele vai escaping de todos os personagens que não podem ocorrer textualmente em URLs:

 var wysiwyg_clean = encodeURIComponent(wysiwyg); 

Neste exemplo, o caractere & comercial & será substituído pela seqüência de escape %26 , que é válida em URLs.

Você pode querer usar encodeURIComponent () .

 encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B 

Você precisa url-escape do e comercial. Usar:

 var wysiwyg_clean = wysiwyg.replace('&', '%26'); 

Como Wolfram ressalta, isso é bem tratado (juntamente com todos os outros caracteres especiais) por encodeURIComponent.

A resposta de Ramil Amr funciona apenas para o caractere &. Se você tem alguns outros caracteres especiais, você deve usar o htmlspecialchars() do PHP eo encodeURIComponent() do JS.

Você pode escrever:

 var wysiwyg_clean = encodeURIComponent(wysiwyg); 

E no lado do servidor:

 htmlspecialchars($_POST['wysiwyg']); 

Isso fará com que o AJAX passe os dados como esperado, e que o PHP (caso você esteja insentindo os dados em um database) irá garantir que os dados funcionem como esperado.

A maneira preferida é usar uma biblioteca JavaScript como jQuery e definir sua opção de dados como um object, então deixe o jQuery fazer a codificação, assim:

 $.ajax({ type: "POST", url: "/link.json", data: { value: poststr }, error: function(){ alert('some error occured'); } }); 

Se você não pode usar o jQuery (que é praticamente o padrão atualmente), use encodeURIComponent .

Você poderia codificar sua string usando a codificação Base64 no lado do JavaScript e decodificá-la no lado do servidor com PHP (?).

JavaScript ( Docu )

 var wysiwyg_clean = window.btoa( wysiwyg ); 

PHP ( Docu ):

 var wysiwyg = base64_decode( $_POST['wysiwyg'] ); 
 encodeURIComponent(Your text here); 

Isso truncará caracteres especiais.

Você pode passar seus argumentos usando essa function encodeURIComponent para não precisar se preocupar em passar nenhum caractere especial.

 data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') 

OU

 var someValue = 'Dolce & Gabbana'; data: "param1=getAccNos&param2="+encodeURIComponent(someValue) 

https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent