html - especiales - espacios en url
¿Se permite que una URL contenga un espacio? (11)
¿Puede alguien señalar un RFC que indique que una URL con un espacio debe estar codificada?
Los URI y, por lo tanto, las URL se definen en RFC 3986.
Si observas la gramática definida allí, eventualmente notarás que un personaje espacial nunca puede ser parte de una URL sintácticamente legal, por lo que el término "URL con un espacio" es una contradicción en sí misma.
¿Se permite que un URI (específicamente una URL HTTP) contenga uno o más caracteres espaciales? Si una URL debe estar codificada, ¿es simplemente una convención seguida comúnmente o una alternativa legítima?
En particular, ¿alguien puede señalar un RFC que indique que una URL con un espacio debe estar codificada?
Motivación por pregunta: mientras probaba beta un sitio web, noté que algunas URL se construyeron con espacios en ellas. Firefox parecía hacer lo correcto, ¡lo que me sorprendió! Pero quería poder señalar a los desarrolladores con un RFC para que sintieran la necesidad de corregir esas URL.
¿Por qué tiene que estar codificado? Una solicitud se ve así:
GET /url HTTP/1.1
(Ignoring headers)
Hay 3 campos separados por un espacio en blanco. Si pones un espacio en tu url:
GET /url end_url HTTP/1.1
Usted sabe que tiene 4 campos, el servidor HTTP le dirá que es una solicitud inválida.
GET /url%20end_url HTTP/1.1
3 campos => válido
Nota: en la cadena de consulta (¿después?), Un espacio generalmente se codifica como +
GET /url?var=foo+bar HTTP/1.1
más bien que
GET /url?var=foo%20bar HTTP/1.1
Firefox 3 mostrará %20
s en las URL como espacios en la barra de direcciones.
La URL puede tener un carácter espacial en ellos y se mostrarán como% 20 en la mayoría de los navegadores, pero las reglas de codificación del navegador cambian con bastante frecuencia y no podemos depender de cómo un navegador mostrará la URL.
Entonces, en su lugar, puede reemplazar el carácter de espacio en la URL con cualquier carácter que crea que hará que la URL sea más legible y "bonita";) ..... O, los caracteres generales preferidos son "-", "_", "+" ... pero estas no son las compulsiones, así que puedes usar cualquiera de los personajes que no se supone que ya están en la URL.
Evite el%, &,}, {,], [, /,>, <como el reemplazo del carácter del espacio URL, ya que pueden generar un error en ciertos navegadores y plataformas.
Como puede ver, el desbordamiento de Stak utiliza el carácter ''-'' como reemplazo de Espacio (% 20).
Ten un feliz interrogatorio.
Las URL no deben tener espacios en ellas. Si necesita abordar uno que sí lo haga, use su valor codificado de %20
Las URL se definen en RFC 3986 , aunque otras RFC son relevantes también, pero RFC 1738 está obsoleto.
Es posible que no tengan espacios en ellos, junto con muchos otros personajes. Como esos caracteres prohibidos a menudo necesitan ser representados de alguna manera, existe un esquema para codificarlos en una URL traduciéndolos a su equivalente hexadecimal ASCII con un prefijo "%".
La mayoría de los lenguajes / plataformas de programación proporcionan funciones para codificar y decodificar URL, aunque es posible que no se adhieran correctamente a los estándares de RFC. Por ejemplo, sé que PHP no.
No he visto eso. Tal vez puedas configurar el servidor web para que acepte ...
Para responder tu pregunta. Yo diría que es bastante común que las aplicaciones reemplacen espacios en valores que se usarán en las URL. La razón de esto es usualmente para evitar la codificación porcentual (URI) más difícil de leer que ocurre.
Echa un vistazo a este artículo de Wikipedia sobre Percent-encoding .
Respuesta más breve: no, debe codificar un espacio; es correcto codificar un espacio como +
, pero solo en la cadena de consulta; en el camino debes usar %20
.
Sí, el espacio generalmente está codificado a "% 20". Cualquier parámetro que pase a una URL debe codificarse, simplemente por razones de seguridad.
Según RFC 1738 :
Inseguro:
Los personajes pueden ser inseguros por varias razones. El carácter de espacio no es seguro porque los espacios significativos pueden desaparecer y se pueden introducir espacios insignificantes cuando las URL se transcriben o se compilan tipográficamente o se someten al tratamiento de programas de procesamiento de textos. Los caracteres
"<"
y">"
no son seguros porque se usan como delimitadores de las URL en texto libre; la marca de comillas ("""
) se utiliza para delimitar URL en algunos sistemas. El carácter"#"
no es seguro y siempre debe codificarse porque se usa en World Wide Web y en otros sistemas para delimitar una URL de un fragmento / ancla. identificador que podría seguirlo. El carácter"%"
no es seguro porque se usa para codificaciones de otros caracteres. Otros caracteres no son seguros porque se sabe que las puertas de enlace y otros agentes de transporte modifican a veces dichos caracteres. Estos caracteres son"{"
,"}"
,"|"
,"/"
,"^"
,"~"
,"["
,"]"
y"`"
.Todos los caracteres inseguros siempre deben estar codificados dentro de una URL . Por ejemplo, el carácter
"#"
debe estar codificado dentro de las URL, incluso en sistemas que normalmente no se ocupan de identificadores de fragmentos o anclajes, de modo que si la URL se copia en otro sistema que sí los utiliza, no será necesario cambiar el Codificación URL