Foros del Web » Programando para Internet » PHP »

¿En qué casos es realmente necesario usar urldecode()?

Estas en el tema de ¿En qué casos es realmente necesario usar urldecode()? en el foro de PHP en Foros del Web. Buenas noches a todos. Pues eso, cuándo es necesario usar la dichosa función urldecode() ? No tengo dudas sobre urlencode() , pero hoy estuve haciendo ...
  #1 (permalink)  
Antiguo 18/10/2008, 21:33
okram
Invitado
 
Mensajes: n/a
Puntos:
¿En qué casos es realmente necesario usar urldecode()?

Buenas noches a todos.

Pues eso, cuándo es necesario usar la dichosa función urldecode()? No tengo dudas sobre urlencode(), pero hoy estuve haciendo unas pruebas y caí en la cuenta que el poner en un archivo php:
Código php:
Ver original
  1. echo $_GET['variable'];
sin nada más, automáticamente ya me imprime el valor de la variable decodificado. Entro a archivo.php?variable=Per%FA y me imprime Perú.

No estoy seguro que sea así, pues en el mismo manual de PHP (que resulta bastante insuficiente para esta función, a mi parecer), en el ejemplo que ponen usan urldecode() para imprimir las variables de la URL. Es que acaso hay alguna directiva en el php.ini que defina ese comportamiento? O en todo caso, en qué casos sí se debería usar urldecode()?

Saludos,
  #2 (permalink)  
Antiguo 18/10/2008, 22:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿En qué casos es realmente necesario usar urldecode()?

según mi parecer, se debe codificar la URL cuando vas a utilizar caracteres ilegales o de transporte débil (osea, que pierda su codificación... puede pasar)

bien, cuando necesitas símbolos reservados de las URL mismas conviene codificar

espero, y se que no es suficiente... pero no encuentro otro sentido a estas funciones mas que este... o si?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 18/10/2008, 22:22
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿En qué casos es realmente necesario usar urldecode()?

Para generar links con caracteres "extraños" conviene usar urlencode(), es más, creo que es necesario. Mi pregunta iba más a su contraparte urldecode(). Al imprimir directamente la variable de la URL sale el texto no codificado. Por eso pregunto si es realmente necesario decodificar las variables o es un proceso que siempre se realiza automáticamente. Y en ese caso, entonces cuál sería el fin del urldecode().

Saludos,
  #4 (permalink)  
Antiguo 18/10/2008, 22:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: ¿En qué casos es realmente necesario usar urldecode()?

comentabas que Per%FA al imprimirla directamente (desde su variable $_GET) ya decodificaba la variable... bien, es natural

es normal (supongo) para PHP decodificar el nivel primitivo de URL codificadas en sus variables GET (sino, todo el tiempo usaríamos urldecode) al final, para eso es...

cuando nos limita esta barrera, usamos urlencode y necesariamente debemos usar su contraparte a la hora de recuperar el valor original en la cadena...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 18/10/2008, 22:54
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿En qué casos es realmente necesario usar urldecode()?

Nunca me había percatado de eso. Ahora necesitaba generar URLs a partir de datos textuales extraídos de la base de datos, y tenía que usar necesariamente un campo nombre pues no tenía un id. Y ahí fue que empecé a dudar. Para generar el link tengo que necesariamente usar urlencode, ya que si no me da algunos errores de validación HTML (xHTML). Esperaba entonces tener que decodificarlos para recibirlos, pero no.

Por eso es que preguntaba.

Estuve haciendo otras pruebas. $_SERVER['QUERY_STRING'] y $_SERVER['REQUEST_URI'] traen las variables tal y como aparecen en la barra de direcciones (codificadas). Al parecer sólo si las accedemos por $_GET es que podemos tener las variables ya decodificadas. He buscado y no hallo nada al respecto. Espero que ese sea un comportamiento constante, y que no dependa ni de la configuración del servidor ni del navegador.

Gracias por tus respuestas. Saludos,
  #6 (permalink)  
Antiguo 18/10/2008, 23:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: ¿En qué casos es realmente necesario usar urldecode()?

A mi parecer, creo es el comportamiento natural al usarlo por GET, ya que las variables de $_SERVER son los strings como tal que vienen de la URL, el protocolo HTTP indica que las variables tienen que venir "legalmente", es decir con el valor codificado, aunque lo mejor siempre es realizar algo de limpieza.

No se hasta que punto afecte usar urldecode en una variable que ya no traiga valores codificados, pero creo que no tiene ningún efecto.

Saludos.
  #7 (permalink)  
Antiguo 19/10/2008, 09:40
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ¿En qué casos es realmente necesario usar urldecode()?

Sí tendría un efecto, aunque sería algo muy excepcional, pues si yo escribo en la URL pagina.php?variable=Per%25FA el imprimirlo con $_GET me daría Per%FA, que es lo que exactamente quiero propagar, y si eso lo decodifico tendría Perú, lo cuál ya sería incorrecto. En algunas ocasiones puede ser necesario pasar el caracter % como parte de una cadena, y si a esa cadena decodificada se la vuelve a decodificar, este caracter con los dos siguentes podrían ser confundidos y reemplazados por X caracter.

Si yo coloco en un campo de texto de un formulario con método GET: 25%100=20, en la URL me aparece algo como 25%25100%3D20, osea hay dos entidades, una que representa al % y otra al =. Si eso lo recibo por $_GET obtengo la cadena original, y si lo re-decodifico obtengo 250=20, osea %10 es tomado como una entidad y cambiado, cuando en realidad no lo es.

En fin, después de todo parece ser que efectivamente ese es un comportamiento natural y constante al usar $_GET. Gracias por sus respuestas.

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:19.