2010-01-28 31 views
28

¿Por qué necesita codificar urls? ¿Hay alguna buena razón por la cual tiene que cambiar cada espacio en los datos GET al %20?¿Por qué necesita codificar URL?

+4

Una buena razón es que en el material impreso que es mejor usar '20'% por lo que algunos de DBO puede escribirla sin tratar de adivinar el número de espacios! –

Respuesta

27

De RFC 2936, sección 2.4.3:

se excluye el carácter de espacio porque los espacios significativos pueden desaparecer y espacios insignificantes pueden ser introducido cuando se transcriben URI o composición tipográfica o se somete al tratamiento de programas de tratamiento de textos . El espacio en blanco también se usa para delimitar el URI en muchos contextos.

+3

no puede ser más preciso que el RFC – Perpetualcoder

+1

En otras palabras, "No, no hay una razón técnica inherente, pero sabemos que los implementadores y los usuarios son descuidados". Probablemente fue la decisión correcta, principalmente porque los usuarios tendrían problemas para mantener la cantidad correcta de espacio. –

+0

@Matthew - Hay una razón técnica inherente, ver mi respuesta – Rippo

-2

Bueno, lo hace así porque cada navegador diferente sabe cómo está codificada la cadena que compone la URL. la conversión del espacio a% 20, etc. hace que esa URL/URI sea portátil. Podría ser latin-1 podría ser unicode. Necesita normalizarse a algo que se entiende universalmente. Eche un vistazo a rfc3986 http://tools.ietf.org/html/rfc3986#section-2.1

+1

Cambiar la representación de bytes no especifica una codificación. Al menos no literalmente –

24

Porque algunos caracteres tienen un significado especial.

Por ejemplo, en una cadena de consulta, el signo comercial (&) se usa como un separador entre los pares clave-valor. Si pusiera un signo & en uno de esos valores, se vería como el separador entre el final de un valor y el comienzo de la siguiente clave. Entonces, para caracteres especiales como este, utilizamos la codificación porcentual para que podamos estar seguros de que los datos están codificados de manera no ambigua.

+0

Pero, digamos que puedes codificar '&' como '% 26'. Aún así, podría tener un valor que contenga la cadena como '100% 26 = 22 '. Todavía se vería como el separador entre pares clave-val ¿no? –

+2

No, porque '%' es uno de los caracteres con significados especiales, por lo que también debe estar codificado (como '% 25'). Si tuviera el valor de la cadena '% 26', entonces eso aparecería en una URL como'% 2526' porque el '%' estaría codificado. Para obtener el valor de la cadena, decodificará '% 25' como'% ', dejándote con la cadena'% 26'. – Jim

6
  • originalmente los navegadores más antiguos podían confundirse por los espacios (ya no es un problema).
  • ahora, si alguien copia la dirección URL para enviar como un enlace - el espacio puede romper el hipervínculo - es decir

Hey! ¡Mira este gato derping tocando el piano!

http://www.mysite.com/?video=funny cat plays piano. 

¿Cómo se omite el enlace?

Ahora mira esto:

http://www.mysite.com/?video=funny%20cat%20plays%20piano. 
Cuestiones relacionadas