将文件名传递给firefox浏览器会导致它用%2520
而不是%20
替换空格。
我在一个名为myhtml.html
的文件中有以下超文本标记语言
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
当我将myhtml.html
加载到火狐中时,图像显示为一个损坏的图像。所以我右击链接来查看图片,它显示了这个修改后的URL:
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png
^
^-----Firefox changed my space to %2520.
什么鬼东西?它将我的共享空间转换成了%2520
。它不应该将其转换为%20
吗?
如何更改此HTML文件,以便浏览器可以找到我的图像?这是怎么回事?
发布于 2013-04-18 22:04:47
稍微解释一下%2520
是什么:
正如您所提到的,常用空格字符被编码为%20
。%
字符被编码为%25
。
获取%2520
的方法是当您的url中已经有一个%20
时,再次进行url编码,这会将%20
转换为%2520
。
您(或您可能使用的任何框架)是否对字符进行双重编码?
编辑:在这方面做了一些扩展,特别是对于本地链接。假设您想要链接到资源C:\my path\my file.html
%
是一个有效的文件名字符,因此将对其进行编码)。file://
协议提供URL,则您基本上是在声明您已采取了所有预防措施并对需要编码的内容进行了编码,其余的应作为特殊字符处理。因此,在上面的示例中,您应该提供file:///c:/my%20path/my%20file.html
。除了修复斜杠之外,客户端不应在此处对字符进行编码。备注:
/
在URL中使用,\
路径中使用反斜杠,但大多数客户端都会将它们转换为正确的正斜杠。file://localhost/c:/my%20path/my%file.html
),但同样,大多数客户端将在没有主机部分(即仅两个斜杠)的情况下工作,假设您指的是本地计算机并添加第三个斜杠。发布于 2013-04-18 22:04:25
出于某种--可能是有效的--原因,url被编码了两次。%25
是the编码的%
符号。所以原始的url看起来像这样:
http://server.com/my path/
然后它被urlencoded了一次:
http://server.com/my%20path/
还有两次:
http://server.com/my%20path/
所以你不应该做urlencoding在你的例子中-因为其他组件似乎已经为你做了那样的事情。使用简单的空格
发布于 2013-04-18 22:01:46
当你试图通过火狐浏览器访问本地文件名时,你必须强制使用file:\\\
协议(http://en.wikipedia.org/wiki/File_URI_scheme),否则火狐将对你的空间进行两次编码。将html代码段从以下位置更改:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
要这样做:
<img src="file:\\\C:\Documents and Settings\screenshots\Image01.png"/>
或者这样:
<img src="file://C:\Documents and Settings\screenshots\Image01.png"/>
然后,firefox被通知这是一个本地文件名,并且它在浏览器中正确地呈现图像,并且正确地对字符串进行了一次编码。
https://stackoverflow.com/questions/16084935
复制相似问题