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:
// 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']; // "+"
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:
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()
el lado del servidor, debe saber que está recibiendo UTF-8. De lo contrario, PHP alterará la codificación.