Passando um nome de arquivo para o navegador Firefox faz com que ele substitua os espaços com %2520
em vez de %20
.
Eu tenho o seguinte HTML em um arquivo chamado myhtml.html
:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
Quando eu carrego myhtml.html
no firefox, a imagem aparece como uma imagem quebrada. Então, clico com o botão direito no link para ver a imagem e ela mostra este URL modificado:
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
^
^-----Firefox changed my space to %2520.
Que diabos? Ele converteu meu espaço em um %2520
. Não deveria estar convertendo em um %20
?
Como altero este arquivo HTML para que o navegador possa localizar minha imagem? O que está acontecendo aqui?
fonte
http://mysite/test & that... If I use
UrlEncode` que muda para,http://mysite/test%20&%20that
mas também quero&
mudar para% 26, então é meu site / teste% 20% 26% 20que `Como posso fazer isso?Por algum motivo - possivelmente válido - o url foi codificado duas vezes.
%25
é o%
sinal codificado pelo URL . Portanto, o url original se parecia com:Em seguida, foi codificado em url uma vez:
e duas vezes:
Portanto, você não deve fazer nenhum urlencoding - no seu caso - como outros componentes já parecem fazer isso para você. Use apenas um espaço
fonte
Quando você está tentando visitar um nome de arquivo local através do navegador firefox, você tem que forçar o
file:\\\
protocolo ( http://en.wikipedia.org/wiki/File_URI_scheme ) ou então o firefox codificará seu espaço DUAS VEZES. Altere o snippet html deste:para isso:
ou isto:
Em seguida, o firefox é notificado de que este é um nome de arquivo local e processa a imagem corretamente no navegador, codificando corretamente a string uma vez.
Link útil: http://support.mozilla.org/en-US/questions/900466
fonte
O seguinte trecho de código resolveu meu problema. Achei que isso pudesse ser útil para outras pessoas.
Em vez de usar o padrão,
encodeURIComponent
minha primeira linha de código é converter tudospaces
em umhyphens
padrão regex/\s\g
e a linha seguinte apenas faz o inverso, ou seja, converte tudo dehyphens
volta emspaces
outroregex pattern /-/g
. Aqui/g
é realmente responsável porfinding all
combinar personagens.Quando estou enviando esse valor para minha chamada Ajax, ele percorre como
normal spaces
ou simplesmente%20
e, portanto, é eliminadodouble-encoding
.fonte
Experimente isso?
encodeURIComponent('space word').replace(/%20/g,'+')
fonte