2012-07-02 60 views
70

Deseo enviar algunas variables y una cadena con el método POST desde JavaScript. Obtengo la cadena de la base de datos y luego la envío a una página de PHP. Estoy usando el objeto XMLHttpRequest. El problema es que la cadena contiene el carácter "&" algunas veces, y la matriz $ _POST en PHP lo ve como varias teclas. He intentado reemplazar el "&" con "\ &" con la función replace(), pero parece que no hace nada. ¿Alguien puede ayudar?¿Cómo puedo enviar el carácter "&" (ampersand) a través de AJAX?

El código JavaScript y la cadena tiene el siguiente aspecto:

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

cuerdas es:

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

Respuesta

127

Puede usar encodeURIComponent().

Se escaparán todos los caracteres que no pueden ocurrir textualmente en URL:

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

En este ejemplo, el carácter & & será reemplazado por la secuencia de escape %26, que es válido en las direcciones URL.

+0

Sí, encodeURIComponent lo hace! ¡Gracias! – candino

+0

¿Es esto suficiente para escapar de manera segura de los datos o es lo suficientemente "justo" para evitar el problema de ampersand? – Sprottenwels

+0

@Sprottenwels, es suficiente para codificar correctamente todos los datos. ¿A qué te refieres con "seguridad" en este contexto? –

15

Es posible que desee utilizar encodeURIComponent().

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

este código está funcionando .. thanx bro .. –

7

Usted necesita para escapar del ampersand. Uso:

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

Como Wolfram señala, esto está muy bien manejada (junto con todos los otros caracteres especiales) por encodeURIComponent.

0

Puede codificar su cadena utilizando la codificación Base64 en el lado de JavaScript y luego decodificándola en el lado del servidor con PHP (?).

JavaScript (Docu)

var wysiwyg_clean = window.btoa(wysiwyg); 

PHP (Docu):

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

Ramil respuesta de Amr funciona sólo para el personaje &. Si tiene algunos otros caracteres especiales, debe usar PHP htmlspecialchars()y JS's encodeURIComponent().

Se puede escribir:

var wysiwyg_clean = encodeURIComponent(wysiwyg); 

Y en el lado del servidor:

htmlspecialchars($_POST['wysiwyg']); 

Esto se asegurará de que AJAX pasará los datos como se esperaba, y que PHP (en el caso Your'e inscribir los datos en una base de datos) se asegurará de que los datos funcionen como se espera.

1

La mejor forma es utilizar una biblioteca JavaScript, como jQuery y establecer su opción de datos como un objeto, entonces que jQuery hacer la codificación, así:

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

Si no puede usar jQuery (que es prácticamente el estándar en estos días), use encodeURIComponent.

Cuestiones relacionadas