characters - url decode javascript
AJAX POST y signo Plus(+)-¿Cómo codificar? (6)
El valor hexadecimal que está buscando es %2B
Para obtenerlo automáticamente en PHP, ejecute su cadena a través de urlencode($stringVal)
. Y luego ejecutarlo a través de urldecode($stringVal)
para recuperarlo.
Si desea que JavaScript lo maneje, use escape( str )
Editar
Después del comentario de @ bobince, hice más lecturas y él está en lo correcto. Utilice encodeURIComponent(str)
y decodeURIComponent(str)
. Escape no convertirá los personajes, solo los escapará con /
''s
Estoy PUBLICANDO los contenidos de un campo de formulario a través de AJAX a un script PHP y usando JavaScript para 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?
En JavaScript, pruebe:
encodeURIComponent()
y en PHP:
urldecode($_POST[''field'']);
Para hacerlo más interesante y, con un poco de suerte, permitirle menos tirones de pelo a otra persona. Utilizando 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
Entonces, en pocas palabras:
var = {"timezone":"%2B"+"5"}
json = JSONEncoder().encode(var)
subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])
Gracias a esta publicación!
Si tiene que hacer un curl en php, debe usar urlencode()
desde PHP pero de forma individual.
strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")
Si urlencode(strPOST)
, le traerá otro problema, tendrá un Item1 y & cambiará el valor de% xx y será un solo valor, vea aquí la devolución.
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
El ejemplo 1 es la buena manera de preparar una cuerda para POST en el rizo
¡El ejemplo 2 muestra que el receptor no verá el igual y el signo y para distinguir ambos valores!
Utilice 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 tu 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 tu servidor:
echo $_GET[''string'']; // "+"
Solo la solicitud HTTP sin formato contiene los datos codificados en la url.
Para una solicitud GET puede recuperar esto desde el URI. $_SERVER[''REQUEST_URI'']
URI. $_SERVER[''REQUEST_URI'']
o $_SERVER[''QUERY_STRING'']
. Para una POST urlencoded, file_get_contents(''php://stdin'')
NÓTESE BIEN:
decode()
solo funciona para caracteres codificados de un solo byte. No funcionará para toda la gama UTF-8.
p.ej:
text = "/u0100"; // Ā
// incorrect
escape(text); // %u0100
// correct
encodeURIComponent(text); // "%C4%80"
Nota: "%C4%80"
es equivalente a: escape(''/xc4/x80'')
Cuál es la secuencia de bytes ( /xc4/x80
) que representa Ā 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.
mi problema fue con los acentos (á É ñ) y el signo más (+) cuando intento salvar "ejemplos de código" de JavaScript a mysql:
mi solución (no es la mejor manera, pero funciona):
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
funció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''");
}
?>