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.