Estoy PUBLICANDO los contenidos de un campo de formulario a través de AJAX a un script PHP y usando JavaScript al escape(field_contents)
. El problema es que los signos más se eliminan y se reemplazan por espacios. ¿Cómo puedo 'codificar' de forma segura el signo más y luego 'decodificarlo' adecuadamente en el lado de PHP?AJAX POST y signo Plus (+) - ¿Cómo codificar?
Respuesta
Use encodeURIComponent() en JS y en PHP debería recibir los valores correctos.
Nota: Cuando accede a $_GET
, $_POST
o $_REQUEST
en PHP, está recuperando valores que ya han sido descodificados.
Ejemplo:
En sus JS:
// url encode your string
var string = encodeURIComponent('+'); // "%2B"
// send it to your server
window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2B
en su servidor:
echo $_GET['string']; // "+"
Es sólo la petición HTTP prima que contiene los datos de URL codificada.
Para una solicitud GET, puede obtener esto del URI. $_SERVER['REQUEST_URI']
o $_SERVER['QUERY_STRING']
. Para un puesto urlencoded, file_get_contents('php://stdin')
NB:
decode()
sólo funciona para los caracteres de un solo byte codificado. No funcionará para toda la gama UTF-8.
por ejemplo:
text = "\u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
Nota: "%C4%80"
es equivalente a: escape('\xc4\x80')
que es la secuencia de bytes (\xc4\x80
) que representa una en UTF-8. Entonces, si usa encodeURIComponent(), su lado del servidor debe saber que está recibiendo UTF-8. De lo contrario, PHP destruirá la codificación.
Una continuación: cuando codigoURIComponent (texto) y texto incluye caracteres como la cita inteligente (&rsqo;), la secuencia de comandos php parece ver caracteres no deseados. Supongo que es un problema de juego de caracteres, pero no sé cómo resolverlo. Estoy haciendo el AJAX POST con "Content-Type": "application/x-www-form-urlencoded; charset = UTF-8", y estoy usando PHP5 en el lado del servidor. – jalperin
¿Cómo ves estos personajes? Debes asegurarte de que el navegador sepa que es UTF-8. En HTML puede configurar '' o '' también puede configurarlo en PHP con el encabezado HTTP de tipo de contenido.'header ('Content-Type: text/html; charset = UTF-8');' PS: &rsqo; no se decodifica en el navegador (FF3.5). – bucabay
¡¡¡Los amo muchachos !!! siempre me ayudas !! :) – Alejandra
En JavaScript tratar:
encodeURIComponent()
y en PHP:
urldecode($_POST['field']);
encodeURIComponent es la respuesta correcta, pero como genera datos codificados en URL y no en datos codificados en HTML, html_entity_encode está apagado. – Quentin
El valor hexadecimal que busca es %2B
conseguirlo automáticamente en PHP ejecutar su cadena a través de urlencode($stringVal)
. Y luego ejecutarlo a través de urldecode($stringVal)
para recuperarlo.
Si desea que el JavaScript para manejarlo, utilice
escape(str)
Editar
Después @ bobince de comentario que hice más lectura y que es correcto. Use encodeURIComponent(str)
y decodeURIComponent(str)
. Escape no convertirá los caracteres, solo los escapará con \
* No * use 'escape' (o' unescape') en JavaScript; no son lo mismo que la codificación URL y se irán mal para + y cualquier carácter no ASCII Unicode. encodeURIComponent/decodeURIComponent es casi siempre lo que quieres. – bobince
Si tiene que hacer un curl en php, debe usar urlencode()
de PHP pero de forma individual.
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
Si lo hace urlencode(strPOST)
, que le llevará otro problema, tendrá una Elemento1 y & estará% valor xx cambio y ser como un solo valor, consulte aquí el regreso!
Ejemplo 1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2B
Ejemplo 2
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2B
Ejemplo 1 es la buena manera de preparar la secuencia para POST en rizo
Ejemplo 2 muestran que el receptor no podrá ver el igual y el signo y para distinguir ambos valores!
mi problema era con los acentos (A e s) y el signo más (+) cuando i para tratar de salvar javascript "ejemplos de código" a MySQL:
mi solución (no la mejor manera, pero obras):
javascript:
function replaceAll(text, busca, reemplaza){
while (text.toString().indexOf(busca) != -1)
text = text.toString().replace(busca,reemplaza);return text;
}
function cleanCode(cod){
code = replaceAll(cod , "|", "{1}"); // error | palos de explode en java
code = replaceAll(code, "+", "{0}"); // error con los signos mas
return code;
}
función para guardar:
function save(pid,code){
code = cleanCode(code); // fix sign + and |
code = escape(code); // fix accents
var url = 'editor.php';
var variables = 'op=save';
var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime();
var result = null;
$.ajax({
datatype : "html",
data: myData,
url: url,
success : function(result) {
alert(result); // result ok
},
});
} // end function
fu nción en php:
<?php
function save($pid,$code){
$code= preg_replace("[\{1\}]","|",$code);
$code= preg_replace("[\{0\}]","+",$code);
mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'");
}
?>
para que sea más interesante y para permitir espero menos de arrancarse el cabello de otra persona. Usando python, diccionario integrado para un dispositivo que podemos usar curl para configurar.
Problema: {"timezone":"+5"} //throws an error " 5"
Solución: {"timezone":"%2B"+"5"} //Works
Así, en pocas palabras:
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
Gracias a este post!
- 1. ¿Debería encodeURIComponent usarse para codificar parámetros de solicitud post ajax?
- 2. Diferencia entre $ .post y $ .ajax?
- 3. Codificar HTML antes del POST
- 4. post en un google plus corriente
- 5. jquery ajax post cancelado
- 6. POST versus llamada Ajax
- 7. $ .ajax (tipo:. Método POST "POST" a php
- 8. AJAX XMLHttpRequest POST
- 9. peticiones AJAX post con jQuery no urlencode '+'
- 10. cross-domain AJAX post call
- 11. solicitud POST jQuery (no AJAX)
- 12. GET vs POST en Ajax
- 13. jQuery Ajax POST no satisfactorio
- 14. GET vs POST en AJAX?
- 15. jQuery ajax() vs get()/post()
- 16. ¿Cómo ingreso un signo más ASP.NET Ajax HTMLEditor
- 17. Struts 2 signo "%" y signo "#" en OGNL
- 18. método .ajax Jquery = "post", pero $ _POST vacío
- 19. página de recarga AJAX con POST
- 20. ¿Cómo probar Google Plus API (cuenta de prueba Google Plus)?
- 21. ¿Cómo saber si hay alguna petición Ajax y Ajax éxito
- 22. jQuery Ajax POST ejemplo con PHP
- 23. asp.net mvc ajax post - redirecttoaction no funciona
- 24. POST ajax de dominio cruzado en cromo
- 25. jQuery AJAX Post no publicando datos
- 26. jQuery AJAX POST se convierte en GET
- 27. Asp.net MVC Ajax JSON (post Array)
- 28. cambiando la referencia de un AJAX POST
- 29. Cómo usar jQuery AJAX $ .post para almacenar variables PHP $ _SESSION?
- 30. ¿Cómo pruebo la solicitud POST ajax con RSpec?
para aclarar, estaba usando escape (field_contents), no codificar – jalperin