为什么url-encoding在域破坏url之后的第一个斜杠?

时间:2013-01-31 17:02:09

标签: javascript url hyperlink urlencode

Salvete!我发现某种url编码方式打破了链接。对于记录%2f表示正斜杠字符:/

现在,考虑一下: 原始链接:http://dottech.org/95285/this-is-the-pacific-barreleye-a-fish-with-a-transparent-head-amazing-photo-of-the-day

javascript(encodeURIComponent)urlencoded link:http://dottech.org%2f95285%2fthis-is-the-pacific-barreleye-a-fish-with-a-transparent-head-amazing-photo-of-the-day

现在,如果您将编码的链接粘贴到浏览器的地址栏中,它就会被破坏(Firefox,Chrome,IE)。

但是,如果你没有对第一个正斜杠进行网址编码,那么它可以完美地运行: “http://dottech.org/95285%2fthis-is-the-pacific-barreleye-a-fish-with-a-transparent-head-amazing-photo-of-the-day

为什么?

1 个答案:

答案 0 :(得分:5)

/是保留字符。它 等同于%2f。如果你需要斜杠而没有其定义的含义,你可以使用编码的形式。

请参阅RFC 3986: "Reserved Characters"

  

保留字符的目的是提供一组分隔符      与URI中的其他数据可区分的字符。      用保留字符替换保留字符的URI      相应的百分比编码八位字节不相等。百分-      编码保留字符,或解码百分比编码的八位字节      对应于保留字符,将改变URI的方式      由大多数应用程序解释。

如果您不使用保留字符/作为第二个斜杠,则提及URL仍然有效的原因是:他们的CMS只是在URL中查找ID部分。因此,您可以向网址添加任何内容,例如以下应该仍然有效:

http://dottech.org/95285/hey-this-URL-got-featured-at-stackoverflow

(但是,似乎在他们的情况下仍然必须是/%2f。)

如果您使用维基百科文章尝试它,它会重定向到首页:

http://en.wikipedia.org/wiki%2fStack_Overflow