¿Cuándo se codifica un espacio en una URL +
y cuándo se codifica %20
?
url
url-encoding
ANTES DE CRISTO.
fuente
fuente
Respuestas:
De Wikipedia (énfasis y enlace agregado):
Por lo tanto, el porcentaje de codificación real se usa
%20
mientras que los datos de formulario en URL están en una forma modificada que usa+
. Por lo tanto, es más probable que solo vea+
en las URL en la cadena de consulta después de un?
.fuente
multipart/form-data
utiliza la codificación MIME;application/x-www-form-urlencoded
usos+
y URI codificados adecuadamente%20
.http://www.bing.com/search?q=hello+world
un recurso con espacio en el nombrehttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:[email protected]?subject=I%20need%20help
. Si lo intentó con +, el correo electrónico se abrirá con + es en lugar de espacios.Esta confusión se debe a que las URL todavía están "rotas" hasta el día de hoy.
Esto se reduce a:
Deberías tener
%20
antes?
y+
después.Fuente
fuente
key1=value1&key1=value2
donde las claves y los valores están codificados con las reglas queencodeURIComponent
siguen, pero AFAIK el contenido de la parte de la consulta es totalmente 100% hasta la aplicación. Aparte de eso, solo va al primero,#
no hay codificación oficial.Yo recomendaría
%20
.¿Los estás codificando?
Sin embargo, esto no es muy consistente en todos los idiomas. Si no me equivoco, en PHP
urlencode()
trata los espacios como+
mientras que Python losurlencode()
trata como%20
.EDITAR:
Parece que estoy equivocado. Python
urlencode()
(al menos en 2.7.2) usa enquote_plus()
lugar dequote()
y por lo tanto codifica espacios como "+". Parece también que la recomendación del W3C es el "+" según aquí: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1Y de hecho, puede seguir este interesante debate sobre el rastreador de problemas de Python sobre qué usar para codificar espacios: http://bugs.python.org/issue13866 .
EDITAR # 2:
Entiendo que la forma más común de codificar "" es como "+", pero solo una nota, puede ser solo yo, pero esto me parece un poco confuso:
fuente
URLEncoder.encode()
método en Java también lo convierte+
.Un espacio solo puede codificarse a "+" en la consulta "pares de clave-valor de tipo de contenido" application / x-www-form-urlencoded "parte de una URL. En mi opinión, esto es un MAYO, NO DEBE. En el resto de las URL, se codifica como% 20.
En mi opinión, es mejor codificar siempre los espacios como% 20, no como "+", incluso en la parte de consulta de una URL, porque es la especificación HTML (RFC-1866) la que especifica que los caracteres de espacio deben codificarse como " + "in" application / x-www-form-urlencoded "pares de clave-valor de tipo de contenido (ver párrafo 8.2.1. subpárrafo 1.)
Esta forma de codificar datos de formulario también se proporciona en especificaciones HTML posteriores. Por ejemplo, busque párrafos relevantes sobre application / x-www-form-urlencoded en la especificación HTML 4.01, y así sucesivamente.
Aquí hay una cadena de muestra en URL donde la especificación HTML permite codificar espacios como ventajas: " http://example.com/over/there?name=foo+bar ". Entonces, solo después de "?", Los espacios se pueden reemplazar por más . En otros casos, los espacios deben codificarse en% 20. Pero como es difícil determinar correctamente el contexto, es la mejor práctica nunca codificar espacios como "+".
Recomendaría codificar en porcentaje todos los caracteres excepto "sin reservas" definidos en RFC-3986, p.2.3
La implementación depende del lenguaje de programación que elija.
Si su URL contiene caracteres nacionales, primero codifíquelos en UTF-8 y luego codifique en porcentaje el resultado.
fuente