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í?

Author: Toby Allen, 2013-04-18

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 proporcionar file:///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.
 173
Author: Nick Andriopoulos,
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

 9
Author: hek2mgl,
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

 7
Author: Eric Leschinski,
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.

 0
Author: Subrata Sarkar,
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,'+')

 -1
Author: Hopefulee,
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