html空间显示为%2520而不是%20

Eri*_*ski 104 html url filenames url-encoding

将文件名传递给firefox浏览器会导致它替换为空格%2520 而不是%20.

我在一个名为的文件中有以下HTML myhtml.html:

<img src="C:\Documents and Settings\screenshots\Image01.png"/>
Run Code Online (Sandbox Code Playgroud)

当我加载myhtml.html到Firefox中时,图像显示为损坏的图像.所以我右键单击链接查看图片,它显示了这个修改过的URL:

file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
                    ^
                    ^-----Firefox changed my space to %2520.
Run Code Online (Sandbox Code Playgroud)

有没有搞错?它把我的空间变成了一个%2520.不应该把它转换成%20

如何更改此HTML文件以便浏览器可以找到我的图像?这里发生了什么?

Nic*_*los 207

稍微解释一下%2520是什么:

公共空间字符的编码方式%20与您自己记录的一样.的%字符被编码为%25.

你得到的方式%2520是你的网址已经有了%20,并再次进行urlencoded,转换%20%2520.

您(或您可能正在使用的任何框架)是双重编码字符吗?

编辑: 扩展一下,特别是对于LOCAL链接.假设您要链接到资源C:\my path\my file.html:

  • 如果你只提供一个本地文件路径,浏览器应该编码并保护给定的所有字符(在上面,你应该给它带有如图所示的空格,因为它%是一个有效的文件名字符,因此它将被编码)到正确的URL(见下一点).
  • 如果你提供了一个带有file://协议的URL ,你基本上就是说你已经采取了所有预防措施并编码了需要编码的内容,其余部分应该被视为特殊字符.在上面的例子中,您应该提供file:///c:/my%20path/my%20file.html.除了修复斜杠,客户端不应该在此处编码字符.

笔记:

  • 斜线方向-正斜杠/在URL中使用,反向斜线\在Windows中的路径,但大多数客户将它们转换为正确的斜线既工作.
  • 此外,协议名称后面有3个斜杠,因为您静默地引用当前计算机而不是远程主机(完整的未缩写路径file://localhost/c:/my%20path/my%file.html),但是大多数客户端将在没有主机部分的情况下工作(即仅两个斜杠) )假设你的意思是本地机器并添加第三个斜杠.


hek*_*mgl 10

对于某些 - 可能有效 - 因为url被编码了两次.%25是urlencoded %标志.所以原始网址看起来像:

http://server.com/my path/
Run Code Online (Sandbox Code Playgroud)

然后它被urlencoded一次:

http://server.com/my%20path/
Run Code Online (Sandbox Code Playgroud)

两次:

http://server.com/my%2520path/
Run Code Online (Sandbox Code Playgroud)

所以你应该不做urlencoding - 在你的情况下 - 因为其他组件似乎已经为你.简单地使用空格


Eri*_*ski 7

当您尝试通过firefox浏览器访问本地文件名时,您必须强制执行file:\\\协议(http://en.wikipedia.org/wiki/File_URI_scheme),否则firefox将对您的空间TWICE进行编码.从这里更改html代码段:

<img src="C:\Documents and Settings\screenshots\Image01.png"/>
Run Code Online (Sandbox Code Playgroud)

对此:

<img src="file:\\\C:\Documents and Settings\screenshots\Image01.png"/>
Run Code Online (Sandbox Code Playgroud)

或这个:

<img src="file://C:\Documents and Settings\screenshots\Image01.png"/>
Run Code Online (Sandbox Code Playgroud)

然后通知firefox这是一个本地文件名,它在浏览器中正确呈现图像,正确编码一次字符串.

有用的链接:http://support.mozilla.org/en-US/questions/900466