Foros del Web » Programando para Internet » PHP »

Escritura correcta de URLs. Htmlentities - Urlencode

Estas en el tema de Escritura correcta de URLs. Htmlentities - Urlencode en el foro de PHP en Foros del Web. Cuando escribimos variables que son URLs, y no para ser escupidas al cliente, sino para que el código las trabaje internamente ¿en qué condiciones es ...
  #1 (permalink)  
Antiguo 16/05/2009, 14:16
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Escritura correcta de URLs. Htmlentities - Urlencode

Cuando escribimos variables que son URLs, y no para ser escupidas al cliente, sino para que el código las trabaje internamente ¿en qué condiciones es lo óptimo pasarles el htmlentities y/o el urlencode? ¿o nunca es realmente necesario?
Por poner un ejemplo sencillo:
Código:
header('Location: http://example.php?id=ident&num=24'); 
ó
header('Location: http://example.php?id=ident&num=24');
Yo para estos casos uso siempre el modo crudo, sin codificar nada, ni con htmlentities ni con urlencode, pero me queda la duda de que me llegue un día un caso especial y me falle el código.

A ver si alguien me aconseja. Gracias.
  #2 (permalink)  
Antiguo 16/05/2009, 15:08
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Escritura correcta de URLs. Htmlentities - Urlencode

una URL con caracteres especiales debe ser escapada con urlencode() si es para HTTP
una URL con caracteres especiales debe ser escapada con htmlentitites() si es para HTML

Código PHP:
echo 'Hot & Silly';
header('Location: ?foo&bar=' urlencode('Hot & Silly')); 
en una cadena de texto para usarse en HTML, si contiene caracteres especiales propios del hipertexto, debe escaparse con htmlentities() si así se desea

(esto incluye al ampersand & de las URLs usadas en atributos "href/src")

Código HTML:
Hot & Silly
<img src="?foo&amp;bar=Hot%20%26%20Silly" alt=""/> 

NOTA que un header() no es para hipertexto, de modo que usar htmlentitites() es innecesario
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 16/05/2009, 16:15
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Escritura correcta de URLs. Htmlentities - Urlencode

'Hot & Silly'... Esta variable conduce invariablemente a un gran rato de divertimento.

Perfecto, gracias. Pues a escapar con urlencode() todas las internas. Ahora bien,
Código HTML:
Hot &amp; Silly
<img src="?foo&amp;bar=Hot%20%26%20Silly" alt=""/> 
viene de aplicar
Código PHP:
htmlentitites(urlencode("?foo&bar=Hot & Silly)) 
¿verdad?
  #4 (permalink)  
Antiguo 16/05/2009, 16:50
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Escritura correcta de URLs. Htmlentities - Urlencode

no, porque urlencode() produce que & sea %26 y htmlentities() produce que & sea &amp;

ambas funciones debes aplicarlas solo si es necesario...

consulta el manual para que te des una idea mas amplia:

http://php.net/htmlentities
http://php.net/urlencode
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 16/05/2009, 17:22
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Escritura correcta de URLs. Htmlentities - Urlencode

Es verdad. Luego lo que has hecho es aplicar urlencode() a la variable con espacios y luego htmlentities() a la url a la hora de escribirla como html, por separado. Ok.

htmlentitites(urlencode()) sólo lo aplico cuando la URL va a llevar variables que no controlo y que pueden llevar espacios o cosas raras así, y luego hay que escribirla en HTML, lógicamente (pero esto me ha dado a menudo malos resultados, el browser a veces no entiende lo que sale cuando lo aplico a la URL entera -htmlentities(urlencode(URL))-). Si controlas las variables y sabes que no van a contener cosas raras, un htmlentities() es bastante a la hora de plasmar HTML, sólo para que automatice el proceso de pasar las & a &amp;

En realidad también intento controlar siempre las variables que van a acabar llegando al HTTP, por eso suelo usar las URL de ese tipo en crudo, pero ahora me queda claro que no está de más acostumbrarse a usar en éstas siempre el urlencode().

Luego me apunto en el manual del buen programador esto:
HTML:
1) Si controlas las variables y van a ir depuradas, aplica htmlentities() a las URLs
2) Si no controlas las variables, procura aplicarles a ellas primero el urlencode(), y luego sigue con el paso 1). Si compruebas que el browser es capaz de leerlo bien, un htmlentities(urlencode(URL)) puede simplificar las cosas en determinados casos.
HTTP:
1) Si controlas las variables y van a ir depuradas, de todos modos aplica un urlencode()
2) Si no controlas las variables, aplica sí o sí un urlencode()

Si es correcta esta conclusión, podemos dar por resuelto el caso
  #6 (permalink)  
Antiguo 16/05/2009, 17:52
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Escritura correcta de URLs. Htmlentities - Urlencode

A las URLs completas no tiene sentido pasarles urlencode(), lo único que va a hacer es arruinar el enlace.

Sólo aplica urlencode a variables separadas que vayas a insertar en una URL.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #7 (permalink)  
Antiguo 16/05/2009, 18:18
 
Fecha de Ingreso: septiembre-2007
Mensajes: 99
Antigüedad: 16 años, 6 meses
Puntos: 0
Respuesta: Escritura correcta de URLs. Htmlentities - Urlencode

Sí, ya digo. Se arruinan muchas veces. Bueno, pues en HTML trato de no pasarlo nunca a la URL entera y ya está. Anotado queda.

Para HTTP supongo que para depurar URLs enteras el urlencode() irá tan bien como va el encodeURIComponent() de javascript, que hace años que lo uso para depurar URLs complejísimas que no controlo en absoluto y jamás me dio un error al procesarlas internamente. Ahora acabo de probar algunas de esas con el urlencode() y va perfecto también.
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 16:41.