Come posso inviare il carattere "&" (e commerciale) tramite AJAX?


90

Voglio inviare alcune variabili e una stringa con il POSTmetodo da JavaScript.

Prendo la stringa dal database e poi la invio a una pagina PHP. Sto usando un XMLHttpRequestoggetto.

Il problema è che la stringa contiene il carattere &alcune volte e l' $_POSTarray in PHP lo vede come più chiavi.

Ho provato a sostituire il &con \&con la replace()funzione, ma non sembra fare nulla.

Qualcuno può aiutare?

Il codice javascript e la stringa hanno questo aspetto:

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);

La stringa è:

 <span class="style2">&quot;Busola&quot;</span>

Risposte:


170

Puoi usare encodeURIComponent () .

Eseguirà l'escape di tutti i caratteri che non possono apparire alla lettera negli URL:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

In questo esempio, il carattere e commerciale &verrà sostituito dalla sequenza di escape %26, valida negli URL.


È sufficiente per sfuggire in modo sicuro ai dati o è "appena" sufficiente per evitare il problema della e commerciale?
Wottensprels

@Sprottenwels, è sufficiente codificare correttamente tutti i dati. Cosa intendi per "sicuro" in questo contesto?
Frédéric Hamidi


9

È necessario eseguire l'URL di escape della e commerciale. Uso:

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

Come sottolinea Wolfram, questo è ben gestito (insieme a tutti gli altri caratteri speciali) da encodeURIComponent.


4

La risposta di Ramil Amr funziona solo per il personaggio &. Se hai altri caratteri speciali, dovresti usare PHP htmlspecialchars() e JS encodeURIComponent().

Tu puoi scrivere:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

E sul lato server:

htmlspecialchars($_POST['wysiwyg']);

Ciò assicurerà che AJAX passi i dati come previsto e che PHP (nel caso in cui tu stia inserendo i dati in un database) assicurerà che i dati funzionino come previsto.



1

Puoi codificare la tua stringa usando la codifica Base64 sul lato JavaScript e poi decodificarla sul lato server con PHP (?).

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ):

var wysiwyg = base64_decode( $_POST['wysiwyg'] );

1

Il modo preferito è utilizzare una libreria JavaScript come jQuery e impostare l'opzione dati come oggetto, quindi lasciare che jQuery esegua la codifica, in questo modo:

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

Se non puoi usare jQuery (che è praticamente lo standard di questi tempi), usa encodeURIComponent .


0
encodeURIComponent(Your text here);

Questo troncerà i caratteri speciali.


Ciò non aggiunge alcun valore alle risposte di cui sopra
Ivan Kaloyanov
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.