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 carácter &
varias veces y la $_POST
matriz en PHP lo ve como múltiples claves.
Intenté reemplazar el &
con \&
con la replace()
función, pero parece que no hace nada.
¿Alguien puede ayudar?
El código javascript y la cadena se ven así:
var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');
var poststr = "act=save";
poststr+="&titlu="+frm.value.titlu;
poststr+="§iune="+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">"Busola"</span>
javascript
ajax
string
post
xmlhttprequest
candino
fuente
fuente
Es posible que desee utilizar encodeURIComponent () .
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
fuente
Necesita url-escapar del ampersand. Utilizar:
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.
fuente
La respuesta de Ramil Amr funciona solo para el carácter &. Si tiene otros caracteres especiales, debe usar PHP
htmlspecialchars()
y JSencodeURIComponent()
.Puedes escribir:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
Y en el lado del servidor:
htmlspecialchars($_POST['wysiwyg']);
Esto asegurará que AJAX pasará los datos como se espera, y que PHP (en caso de que esté ingresando los datos en una base de datos) se asegurará de que los datos funcionen como se espera.
fuente
Puede pasar sus argumentos utilizando esta función encodeURIComponent para que no tenga que preocuparse por pasar ningún carácter especial.
data: "param1=getAccNos¶m2="+encodeURIComponent('Dolce & Gabbana')
O
var someValue = 'Dolce & Gabbana'; data: "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
fuente
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 ( Docu )
var wysiwyg_clean = window.btoa( wysiwyg );
PHP ( Docu ):
var wysiwyg = base64_decode( $_POST['wysiwyg'] );
fuente
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 .
fuente
encodeURIComponent(Your text here);
Esto truncará los caracteres especiales.
fuente