Un espacio html se muestra como %2520 en lugar de %20
Pasar un nombre de archivo al navegador firefox hace que reemplace los espacios con %2520
en lugar de %20
.
Tengo el siguiente HTML en un archivo llamado myhtml.html
:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
Cuando cargo myhtml.html
en firefox, la imagen aparece como una imagen rota. Así que hago clic derecho en el enlace para ver la imagen y muestra esta URL modificada:
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
^
^-----Firefox changed my space to %2520.
¿Qué diablos? Convirtió mi espacio en un %2520
. ¿No debería convertirlo en un %20
?
Cómo puedo cambiar este HTML archivo para que el navegador pueda encontrar mi imagen? ¿Qué está pasando aquí?
5 answers
Un poco de explicación de lo que %2520
es:
El carácter de espacio común está codificado como %20
como usted mismo señaló.
El carácter %
está codificado como %25
.
La forma en que obtienes %2520
es cuando tu url ya tiene un %20
en ella, y obtiene urlencoded de nuevo, lo que transforma el %20
a %2520
.
¿ Es usted (o cualquier marco que pueda estar utilizando) caracteres de doble codificación?
Editar:
Expandiendo un poco en esto, especialmente para Enlaces LOCALES. Suponiendo que desea vincular al recurso C:\my path\my file.html
:
- si solo proporciona una ruta de archivo local, se espera que el navegador codifique y proteja todos los caracteres dados (en lo anterior, debe darle espacios como se muestra, ya que
%
es un carácter de nombre de archivo válido y, como tal, se codificará) al convertir a una URL adecuada (consulte el siguiente punto). - si proporcionas una URL con el protocolo
file://
, básicamente estás indicando que has tomado todo precauciones y codificado lo que necesita codificación, el resto debe ser tratado como caracteres especiales. En el ejemplo anterior, debe proporcionarfile:///c:/my%20path/my%20file.html
. Aparte de corregir barras, los clientes no deben codificar caracteres aquí.
NOTAS:
- Dirección de barra: las barras inclinadas hacia adelante
/
se usan en URLs, las barras inclinadas hacia atrás\
en rutas de Windows, pero la mayoría de los clientes trabajarán con ambas convirtiéndolas a la barra inclinada hacia adelante adecuada. - además, hay 3 barras después del nombre del protocolo, ya que se refiere silenciosamente a la máquina actual en lugar de a un host remoto ( la ruta completa sin abreviar sería
file://localhost/c:/my%20path/my%file.html
), pero de nuevo la mayoría de los clientes trabajarán sin la parte del host (es decir, solo dos barras) asumiendo que se refiere a la máquina local y agregando la tercera barra.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-17 13:34:00
Por cualquier razón la url fue codificada dos veces. %25
es el signo urlencoded %
. Así que la url original parecía:
http://server.com/my path/
Luego se codificó una vez:
http://server.com/my%20path/
Y dos veces:
http://server.com/my%2520path/
Por lo que no debe hacer urlencoding como otros componentes parece que ya para usted. Utilice simplemente un espacio
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 14:04:24
Cuando intenta visitar un nombre de archivo local a través del navegador firefox, debe forzar el protocolo file:\\\
( http://en.wikipedia.org/wiki/File_URI_scheme ) o firefox codificará tu espacio DOS VECES. Cambie el fragmento html de esto:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
A esto:
<img src="file:\\\C:\Documents and Settings\screenshots\Image01.png"/>
O esto:
<img src="file://C:\Documents and Settings\screenshots\Image01.png"/>
Luego se notifica a firefox que este es un nombre de archivo local, y representa la imagen correctamente en el navegador, codificando correctamente la cadena una vez.
Enlace Útil: http://support.mozilla.org/en-US/questions/900466
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 14:33:23
El siguiente fragmento de código resolvió mi problema. Pensé que esto podría ser útil para otros.
var strEnc = this.$.txtSearch.value.replace(/\s/g, "-");
strEnc = strEnc.replace(/-/g, " ");
En lugar de usar por defecto encodeURIComponent
mi primera línea de código es convertir todo spaces
en hyphens
usando el patrón regex /\s\g
y la siguiente línea simplemente hace lo contrario, es decir, convierte todo hyphens
de nuevo a spaces
usando otro regex pattern /-/g
. Aquí /g
es realmente responsable de finding all
caracteres coincidentes.
Cuando estoy enviando este valor a mi llamada Ajax, atraviesa como normal spaces
o simplemente %20
y así se deshace de double-encoding
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-01 07:28:31
Pruebe esto?
encodeURIComponent('space word').replace(/%20/g,'+')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-10 05:15:54