¿Cómo puedo enviar el carácter “&” (ampersand) a través de AJAX?

3 minutos de lectura

¿Como puedo enviar el caracter ampersand a traves de
candiño

Quiero enviar algunas variables y una cadena con el POST método de JavaScript.

Obtengo la cadena de la base de datos y luego la envío a una página PHP. estoy usando un XMLHttpRequest objeto.

El problema es que la cadena contiene el caracter & un par de veces, y el $_POST array en PHP lo ve como múltiples claves.

Intenté reemplazar el & con & con el replace() funciona, pero no parece hacer nada.

¿Alguien puede ayudar?

El código javascript y la cadena se ve así:

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 cadena es:

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

Puedes usar encodeURIComponent().

Se escapará de todos los caracteres que no pueden aparecer textualmente en las URL:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

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

  • ¿Es esto suficiente para escapar de forma segura de los datos o es “solo” suficiente para evitar el problema del ampersand?

    – Wottensprels

    07 oct.

  • @Sprottenwels, es suficiente para codificar correctamente todos los datos. ¿Qué quiere decir con “seguro” en este contexto?

    – Frederic Hamidi

    07 oct.

¿Como puedo enviar el caracter ampersand a traves de
wolframio

Es posible que desee utilizar encodeURIComponent().

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

Necesita escapar de la url del ampersand. Usar:

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

Como señala Wolfram, esto se maneja muy bien (junto con todos los demás caracteres especiales) por encodeURIComponent.

La respuesta de Ramil Amr solo funciona para el carácter &. Si tiene otros caracteres especiales, debe usar PHP htmlspecialchars() y JS’s encodeURIComponent().

Puedes escribir:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

Y del lado del servidor:

htmlspecialchars($_POST['wysiwyg']);

Esto asegurará que AJAX pase los datos como se esperaba, y que PHP (en caso de que esté insertando los datos en una base de datos) se asegurará de que los datos funcionen como se espera.

Puede pasar sus argumentos usando esta función encodeURIComponent para que no tenga que preocuparse por pasar ningún carácter especial.

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

O

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

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

¿Como puedo enviar el caracter ampersand a traves de
Sirko

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

JavaScript (documento)

var wysiwyg_clean = window.btoa( wysiwyg );

PHP (documento):

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

1643355546 145 ¿Como puedo enviar el caracter ampersand a traves de
cristobal tokar

La forma preferida es usar una biblioteca de JavaScript como jQuery y configurar su opción de datos como un objeto, luego dejar que jQuery haga 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.

.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad