Codificar url con javascript y decodificar con php

Tengo la siguiente duda, sobre si me dará problemas o no lo siguiente.
Como los campos texto introducidos mediante <input> o <textarea> pueden contener caracteres "especiales" ... O sea "ñ, ç ..." al pasar estos datos hacia el servidor lo hago mediante url, mediante post, y originariamente en javascript mediante la función encodeURI ... Al recibir dicho dato en el lado servidor lo recojo mediante $_POST[ ] ... Pero para almacenar el dato original debo realizar la conversión que en este caso se hace mediante php: urldecode( ) ...
¿Puede dar problemas esto de algun tipo, codificar en javascript y decodificar en php?

1 respuesta

Respuesta
1

Creo que tienes una confusión $_POST envía los datos en las cabeceras del HTTP no por url, por url lo hace $_GET.

Si envías datos por $_POST no es necesario aplicar el encodeURI.

Si los datos lo envías por URL, lo recibes con $_GET, en ese caso si es necesario codificar y decodificar porque los caracteres especiales si presentarán problemas, pero dudo que puedas pasar el contenido de un textarea por url, si hace que la url supere los 2054 caracteres (Navegadores actuales) o los 255 caracteres (Navegadores viejos e IE).

No tengo ninguna confusión, lo único que hago es aplicar la codificación para todo elemento que considero que me pueda dar problemas ... De todas maneras da igual ... no me respondes a la pregunta, pongamos que lo paso mediante url, con get / $_GET (dilo como quieras), si lo codifico mediante javascript, enviándolo tal que:

location.href='http://paginadestino.php/?datos=' + cadena_cofificada;

¿Cuando leo los datos en destino (paginadestino.php) y utilizo $_GET, si lo descodifico mediante php, me dará problemas? ¿o lo debería codificar si o si mediante javascript?

Saludos y gracias 

Como te mencioné, si haces el envío por $_POST no hace falta como te dije, si lo haces por $_GET no hay ningún problema, de hecho si revisas el siguiente enlace

http://php.net/manual/es/function.urldecode.php 

la función urldecode() es justo para eso, claro si y solo si lo haces por $_GET; por $_POST no haría falta.

Si, se lo que dices, todo, pero ten en cuenta que la codificación no es en php, sino en javascript utilizando encodeURI y la decodificación es en php con urldecode. Mi duda radica en utilizar dos lenguajes no el mismo para ambas operaciones.

Prueba a ver si con esta función te sirve

function codificarUrl(str) {
  str = (str + '').toString();
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}

Ahora si haces el envío por $_POST, el se codifica en UTF8 al salir y se decodifica en UTF8 al llegar, todo de manera automático, sin necesidad de intervención

Ok, la probé, funciona en PHP 5.3 en adelante.

Y no son compatibles las funciones que mencionas, pero con esta función se solventa.

Espero sea de ayuda, nunca había intentado o me había tocado implementarlo, siempre trato de utilizar POST, cada día se aprende algo nuevo, siempre lo he dicho

Gracias por contestar.

Mi duda radicaba en saber si codificar en un lenguaje y decodificar en otro podría dar problemas, por lo que me comentas si, por lo que cuandonpase la información mediante GET, deberé decodificarlo tambien en javascript, aunque lo más cómodo es decodificarlo en php ... pero bueno, antes que la comodidad está la fiabilidad de los datos.

Gracias de nuevo

Sí, tienes razón, para eso es la función, para codificar desde javascript en una forma que php la pueda decodificar.

Ahora te contradices, mi idea es codificar y decodificar en javascript, pero tu última contestación dices de codificar en javascript y decodificar en php

No es contradicción, la función javascript que te envié, codifica de manera que sea compatible con php.

Recuerda que tenemos una conversación cliente--->servidor.

El cliente envía la petición codificada, pero el cliente habla JavaScript; al no poder hablar php, el servidor no lo entenderá.

Ahora, si le enseñamos a hablar al cliente, de forma que sea entendible para el servidor (función codificarUrl), el servidor la entenderá sin problemas.

Entonces Codificamos en javascript, de modo que sea compatible con PHP, por medio de una función, que fue la que envié en la respuesta anterior

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas