without rawurlencode online httputility ejemplo urlencode

rawurlencode - urlencode php



¿Por qué debería usar urlencode? (5)

¿Cómo va a distinguir si sus dos caminos son así?

http://myapp/my%20test/

y

http://myapp/my test/

Note space &% 20 es parte de URL.

Estoy escribiendo una aplicación web y aprendiendo cómo urlencode enlaces html ...

Todas las preguntas de urlencode aquí (ver etiqueta a continuación) son "¿Cómo ...?" preguntas

Mi pregunta no es "¿Cómo?" ¿pero por qué?".

Incluso el artículo de wikipedia solo trata la mecánica de esto:
http://en.wikipedia.org/wiki/Urlencode pero no por qué debería usar urlencode en mi aplicación.

¿Cuáles son las implicaciones de seguridad de usar (o no usar) urlencode?

¿Cómo se puede explotar una falla al usar urlencode?

¿Qué tipo de errores o fallas pueden surgir con las URL no codificadas?

Lo estoy preguntando porque incluso sin urlencode, un enlace al sitio web de mi aplicación como los siguientes trabajos como se esperaba: http://myapp/my%20test/ée/ràé

¿Por qué debería usar urlencode?

O bien, otra forma de decirlo:

¿Cuándo debería usar urlencode? En qué tipo de situaciones?


Dos razones por las que podría pensar:

  • Realmente depende de cómo analiza el lado del servidor de consultas. Por ejemplo, pasar parámetros usando la solicitud GET de HTTP tendrá problemas si hay caracteres como & dentro de algún parámetro.
  • Le permite manejar caracteres no ansi de la manera que le gustaría (dicta la codificación). De lo contrario, el navegador podría pasarlos en alguna codificación aleatoria (no creo que esté realmente definido en ningún estándar, corríjame si estoy equivocado).

Hay RFCs ( http://www.faqs.org/rfcs/rfc1738.html y similares) que definen el formato de las URL, y los desarrolladores de los navegadores / servidores web se basan en esto como un estándar para interpretar los datos. Si no cumple, los resultados pueden ser impredecibles.

HTTP URL tiene su especificación, y establece que prácticamente todos los caracteres no latinos deben codificarse.


La razón principal es que esencialmente se escapa de los caracteres que se incluirán en la URL de su página web.

Supongamos que un usuario ingresa un campo de formulario de usuario como "& joe" y nos gustaría redireccionar a una página que contenga ese nombre como parte de la URL, utilizando la codificación URL, que sería, por ejemplo:

localhost/index.php?name=%26joe //note how the ampersand is escaped

Si no usaste urlencoding, terminarías con:

localhost/index.php?name=&joe

y ese ampersand causaría todo tipo de imprevisibilidad


Actualización: hay una explicación aún mejor (imo) más arriba:

Un URI se representa como una secuencia de caracteres, no como una secuencia de octetos. Esto se debe a que el URI puede ser "transportado" por medios que no son a través de una red informática, por ejemplo, impreso en papel, leído en la radio, etc.

y

Sin embargo, para las secuencias de caracteres originales que contienen caracteres que no son ASCII, la situación es más difícil. Se espera que los protocolos de Internet que transmiten secuencias de octetos destinados a representar secuencias de caracteres proporcionen alguna forma de identificar el juego de caracteres utilizado, si pudiera haber más de uno [RFC2277]. Sin embargo, actualmente no hay ninguna disposición dentro de la sintaxis URI genérica para lograr esta identificación. Un esquema de URI individual puede requerir un juego de caracteres único, definir un juego de caracteres predeterminado o proporcionar una forma de indicar el juego de caracteres utilizado.

Porque está establecido en el RFC :

2.4. Secuencias de escape

Los datos se deben escapar si no tiene una representación utilizando un carácter no reservado; esto incluye datos que no corresponden a un carácter imprimible del conjunto de caracteres codificados en US-ASCII, o que corresponden a cualquier carácter US-ASCII que no se permite, como se explica a continuación.

y

2.4.2. Cuándo escaparse y Unescape

Un URI siempre está en una forma "escapada", ya que al escaparse o desacralizar un URI completo podría cambiar su semántica. Normalmente, el único momento en que se pueden realizar con seguridad las codificaciones de escape es cuando el URI se crea a partir de sus partes componentes; cada componente puede tener su propio conjunto de caracteres que están reservados, por lo que solo el mecanismo responsable de generar o interpretar ese componente puede determinar si el escaparse de un personaje cambiará o no su semántica. Del mismo modo, un URI debe separarse en sus componentes antes de que los caracteres escapados dentro de esos componentes puedan decodificarse de manera segura.

En algunos casos, los datos que podrían ser representados por un carácter no reservado pueden aparecer escapados; por ejemplo, algunos sistemas dejan sin efecto automáticamente algunos de los caracteres "reservados" sin reservas. Si el esquema de URI dado define un algoritmo de canonicalización, entonces los caracteres sin reserva se pueden desacoplar de acuerdo con ese algoritmo. Por ejemplo, "% 7e" se usa a veces en lugar de "~" en una ruta de URL http, pero las dos son equivalentes para una URL http.

Debido a que el porcentaje del carácter "%" siempre tiene el propósito reservado de ser el indicador de escape, se debe escapar como "% 25" para poder usarlo como datos dentro de un URI. Los implementadores deben tener cuidado de no escaparse ni volver a escaparse de la misma cadena más de una vez, ya que desempañar una cadena ya no escindida puede llevar a interpretar erróneamente un carácter de datos porcentuales como otro carácter escapado, o viceversa en el caso de escapar de una cadena ya escapada.