html空间显示为%2520,而不是%20
将文件名传递给Firefox浏览器会导致它用%2520
而不是%20
replace空格。
我在名为myhtml.html
的文件中有以下HTML:
<img src="C:\Documents and Settings\screenshots\Image01.png"/>
当我加载到Firefox的myhtml.html
,图像显示为一个破碎的图像。 所以我右键点击链接查看图片,它显示了这个修改后的url:
file:///c:/Documents%2520and%2520Settings/screenshots/Image01.png ^ ^-----Firefox changed my space to %2520.
有没有搞错? 它将我的空间转换为%2520
。 不应该把它转换成%20
吗?
如何更改此HTML文件,以便浏览器可以find我的图像? 这里发生了什么?
有点解释什么是%2520
是:
您自己记下的常见空格字符编码为%20
。 %
字符被编码为%25
。
你得到%2520
的方式是当你的url已经有%20
的时候,再次被urlencoded,这将%20
转化为%2520
。
你(或任何你可能使用的框架)双重编码字符?
编辑:扩大一点,尤其是本地链接。 假设你想链接到资源C:\my path\my file.html
:
- 如果仅提供本地文件path,则浏览器需要对给出的所有字符进行编码和保护(在上文中,您应该给出空格,因为
%
是有效的文件名字符,因此它将被编码)转换成一个合适的URL(见下一点)。 - 如果你提供一个带有
file://
协议的URL,你基本上是说你已经采取了所有的预防措施,并且编码了需要编码的东西,其余的应该被视为特殊字符。 在上面的例子中,你应该提供file:///c:/my%20path/my%20file.html
。 除了修正斜杠,客户不应该在这里编码字符。
笔记:
- 斜杠方向 – 正斜杠
/
在URL中使用,在Windowspath中反斜杠\
,但大多数客户端将通过将它们转换为适当的正斜杠来工作。 - 另外,在协议名称后面有3个斜线,因为你默默地引用了当前的机器而不是远程主机(完整的非缩写path是
file://localhost/c:/my%20path/my%file.html
),但是大多数客户端通过假设你的意思是本地计算机并添加第三个斜杠,也可以在没有主机部分的情况下工作(即只有两个斜杠)。
无论出于何种原因,url被编码了两次。 %25
是urlencoded %
符号。 所以原来的url看起来像:
http://server.com/my path/
然后它得到urlencoded一次:
http://server.com/my%20path/
和两次:
http://server.com/my%2520path/
所以你不应该像其他组件似的urlencoding已经为你。 只使用一个空间
当您尝试通过Firefox浏览器访问本地文件名时,您必须强制使用file:\\\
protocol( http://en.wikipedia.org/wiki/File_URI_scheme ),否则firefox会将您的空间编码为TWICE。 改变这个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被通知这是一个本地文件名,并在浏览器中正确渲染图像,正确编码string一次。
有用的链接: http : //support.mozilla.org/en-US/questions/900466
下面的代码片段解决了我的问题。 以为这可能对别人有用。
var strEnc = this.$.txtSearch.value.replace(/\s/g, "-"); strEnc = strEnc.replace(/-/g, " ");