Use encodeURIComponent()en JS y en PHP debería recibir los valores correctos.
Nota: Cuando accede $_GET, $_POSTo $_REQUESTen 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.