para - Un espacio html se muestra como% 2520 en vez de% 20
en html, el atributo alt se emplea para (5)
¿Prueba esto?
encodeURIComponent(''space word'').replace(/%20/g,''+'')
Al pasar un nombre de archivo al navegador Firefox, se reemplazan espacios con %2520
lugar de %20
.
Tengo el siguiente código HTML en un archivo llamado myhtml.html
:
<img src="C:/Documents and Settings/screenshots/Image01.png"/>
Cuando cargo myhtml.html
en myhtml.html
, la imagen aparece como una imagen rota. Así que hago clic derecho en el enlace para ver la imagen y se 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 estar convirtiéndolo en un %20
?
¿Cómo cambio este archivo HTML para que el navegador pueda encontrar mi imagen? ¿Que está pasando aqui?
Cuando intentas visitar un nombre de archivo local a través del navegador Firefox, debes forzar el file:///
protocol ( http://en.wikipedia.org/wiki/File_URI_scheme ) o de lo contrario, firefox codificará tu espacio DOS VECES. Cambia el fragmento de 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 le 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
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 el encodeURIComponent
predeterminado, mi primera línea de código convierte todos los spaces
en hyphens
utilizando el patrón regex //s/g
y la siguiente línea hace lo contrario, es decir, convierte todos los hyphens
en spaces
con otro regex pattern /-/g
. Aquí /g
es en realidad responsable de finding all
los caracteres coincidentes.
Cuando envío este valor a mi llamada Ajax, se desplaza como normal spaces
o simplemente %20
y se deshace de la double-encoding
.
Por alguna razón, la URL se codificó dos veces. %25
es el signo %
urlencoded. Así que la url original se veía así:
http://server.com/my path/
Luego se urlencoded una vez:
http://server.com/my%20path/
y dos veces:
http://server.com/my%2520path/
Por lo tanto, no debe hacer urlencoding ya que otros componentes ya lo tienen para usted. Use simplemente un espacio
Un poco de explicación sobre lo que es %2520
:
El carácter de espacio común está codificado como %20
como te has fijado. El carácter %
está codificado como %25
.
La forma en que obtienes %2520
es cuando tu URL ya tiene un %20
y se vuelve a codificar de nuevo, lo que transforma el %20
en %2520
.
¿Está usted (o cualquier marco que pueda estar usando) caracteres de doble codificación?
Editar: ampliando un poco sobre esto, especialmente para los 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 el ejemplo anterior, debe darle espacios como se muestra, ya que
%
es un nombre de archivo válido y como tal se codificará) convirtiendo a una URL adecuada (ver siguiente punto). - si proporciona una URL con el protocolo
file://
, básicamente está diciendo que ha tomado todas las precauciones y codificado lo que necesita codificación, el resto debe tratarse como caracteres especiales. En el ejemplo anterior, debe proporcionarfile:///c:/my%20path/my%20file.html
. Además de corregir barras, los clientes no deberían codificar caracteres aquí.
NOTAS:
- Dirección de barra diagonal
/
barras diagonales/
se usan en URLs, barras diagonales/
en las rutas de Windows, pero la mayoría de los clientes trabajarán con ambas convirtiéndolas en la barra inclinada correcta. - 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 no abreviada completa 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, dos barras) asumiendo que se refiere a la máquina local y agregando la tercera barra inclinada.