2012-07-02 13 views
70

Voglio inviare alcune variabili e una stringa con metodo POST da JavaScript. Prendo la stringa dal database e poi la mando su una pagina PHP. Sto usando l'oggetto XMLHttpRequest. Il problema è che la stringa contiene il carattere "&" poche volte e l'array $ _POST in PHP lo vede come più chiavi. Ho provato a sostituire "&" con "\ &" con la funzione replace(), ma non sembra che faccia nulla. Qualcuno può aiutare?Come posso inviare il carattere "&" (e commerciale) via AJAX?

il codice JavaScript e la corda si presenta così:

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 è:

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

risposta

127

È possibile utilizzare encodeURIComponent().

Fuoriuscirà tutti i caratteri che non possono verificarsi testualmente URL:

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

In questo esempio, il carattere commerciale & sarà sostituito dalla sequenza di escape %26, valido a URL.

+0

Sì, encodeURIComponent lo fa! Grazie! – candino

+0

È sufficiente per evitare in modo sicuro i dati o è "sufficiente" per evitare il problema della e commerciale? – Sprottenwels

+0

@Sprottenwels, è sufficiente codificare correttamente tutti i dati. Cosa intendi con "sicuro" in questo contesto? –

15

Si potrebbe desiderare di utilizzare encodeURIComponent().

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

questo codice sta funzionando .. thanx bro .. –

7

È necessario url-escape dalla e commerciale. Usa:

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

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

0

È possibile codificare la stringa utilizzando la codifica Base64 sul lato JavaScript e quindi decodificarla sul lato server con PHP (?).

JavaScript (Docu)

var wysiwyg_clean = window.btoa(wysiwyg); 

PHP (Docu):

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

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

Si può scrivere:

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

E sul lato server:

htmlspecialchars($_POST['wysiwyg']); 

Questo farà in modo che AJAX passerà i dati come previsto, e che PHP (nel caso in cui your'e inscrivere i dati in un database) assicurerà che i dati funzionino come previsto.

1

Il modo migliore è quello di utilizzare una libreria JavaScript come jQuery e impostare l'opzione di dati come un oggetto, poi lasciare jQuery fare la codifica, in questo modo:

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

Se non è possibile utilizzare jQuery (che è praticamente lo standard in questi giorni), utilizzare encodeURIComponent.

Problemi correlati