Pasar un nombre de archivo al navegador Firefox hace que reemplace espacios con en %2520
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.
¿Que demonios? Convirtió mi espacio en un %2520
. ¿No debería convertirlo en un %20
?
¿Cómo cambio este archivo HTML para que el navegador pueda encontrar mi imagen? ¿Que está pasando aqui?
fuente
http://mysite/test & that... If I use
UrlEncode` a la que cambia,http://mysite/test%20&%20that
pero también quiero&
que cambie a% 26, así que es mysite / test% 20% 26% 20that `¿Cómo puedo hacer eso?Por alguna razón, posiblemente válida, la URL se codificó dos veces.
%25
es el%
signo codificado por urlencoded . Entonces, la URL original se veía así:Luego se codificó en urlen una vez:
y dos veces:
Por lo tanto, no debe realizar codificación urlen, en su caso , ya que otros componentes parecen hacerlo para usted. Usa simplemente un espacio
fuente
Cuando intentas visitar un nombre de archivo local a través del navegador Firefox, debes forzar el
file:\\\
protocolo ( http://en.wikipedia.org/wiki/File_URI_scheme ) o, de lo contrario, Firefox codificará tu espacio DOS VECES. Cambie el fragmento html de esto:a esto:
o esto:
Luego, se notifica a Firefox que este es un nombre de archivo local y muestra la imagen correctamente en el navegador, codificando correctamente la cadena una vez.
Enlace útil: http://support.mozilla.org/en-US/questions/900466
fuente
El siguiente fragmento de código resolvió mi problema. Pensé que esto podría ser útil para otros.
En lugar de usar el predeterminado,
encodeURIComponent
mi primera línea de código es convertir todospaces
en elhyphens
uso de un patrón de expresiones regulares/\s\g
y la siguiente línea simplemente hace lo contrario, es decir, convierte todo dehyphens
nuevo paraspaces
usar otroregex pattern /-/g
. Aquí/g
es realmente responsable de hacerfinding all
coincidir los personajes.Cuando envío este valor a mi llamada Ajax, atraviesa como
normal spaces
o simplemente%20
y, por lo tanto, se deshace dedouble-encoding
.fuente
¿Prueba esto?
encodeURIComponent('space word').replace(/%20/g,'+')
fuente