Estoy PUBLICANDO el contenido de un campo de formulario a través de AJAX en 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' apropiadamente en el lado de PHP?
98
Respuestas:
Use
encodeURIComponent()
en JS y en PHP debería recibir los valores correctos.Nota: Cuando accede
$_GET
,$_POST
o$_REQUEST
en PHP, está recuperando valores que ya han sido decodificados.Ejemplo:
En tu JS:
En su servidor:
Solo la solicitud HTTP sin procesar contiene los datos codificados en la URL.
Para una solicitud GET, puede recuperarla de
URI. $_SERVER['REQUEST_URI']
o$_SERVER['QUERY_STRING']
. Para un POST con código de URL,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:
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 usaencodeURIComponent()
el lado del servidor, debe saber que está recibiendo UTF-8. De lo contrario, PHP alterará la codificación.fuente
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
o<meta charset="UTF-8">
también puede configurarlo en PHP con el Encabezado HTTP de tipo de contenido.header('Content-Type: text/html;charset=UTF-8');
PD: & rsqo; no decodifica en el navegador (FF3.5).En JavaScript intente:
y en PHP:
fuente
urldecode
también está muy lejos ya que PHP lo decodificará automáticamente antes de completar$_POST
.El valor hexadecimal que busca es
%2B
Para obtenerlo automáticamente en PHP, ejecute su cadena
urlencode($stringVal)
. Y luego ejecútelo lo suficienteurldecode($stringVal)
para recuperarlo.Si desea que JavaScript lo maneje, useescape( str )
Editar
Después del comentario de @bobince, leí más y tiene razón. Utilice
encodeURIComponent(str)
ydecodeURIComponent(str)
. Escape no convertirá a los personajes, solo escapar de ellos con\
'sfuente
escape
(ounescape
) en JavaScript; no son lo mismo que la codificación de URL y funcionarán mal para + y cualquier carácter Unicode que no sea ASCII. encodeURIComponent / decodeURIComponent es casi siempre lo que desea.Para hacerlo más interesante y, con suerte, permitir que otra persona se tire menos del cabello. Usando python, diccionario construido 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:
¡Gracias a esta publicación!
fuente
Si tiene que hacer un curl en php, ¡debe usarlo
urlencode()
desde PHP pero individualmente!Si lo hace
urlencode(strPOST)
, le traerá otro problema, tendrá un Item1 y & cambiará el valor% xx y será como un valor, vea aquí abajo la devolución!Ejemplo 1
Ejemplo 2
El ejemplo 1 es la buena forma de preparar la cadena para POST en curl
¡El ejemplo 2 muestra que el receptor no verá el igual y el ampersand para distinguir ambos valores!
fuente
mi problema fue con los acentos (á É ñ) y el signo más (+) cuando intento guardar los "ejemplos de código" de javascript en mysql:
mi solución (no de la mejor manera, pero funciona):
javascript:
función para guardar:
función en php:
fuente