使用方括号编码的URL。在Chrome/Firefox/IE中表现不同。

11

我有一个链接长这样(因为它是URL,所以有点丑)

<a href="/items?fc%5B%5D=12345&amp;fc%5B%5D=56789&amp;utf8=%E2%9C%93">foo</a>

简单来说,它是经过URL编码的,并且可以翻译成

<a href="/items?fc[]=12345&fc[]=56789&utf8=✓">foo</a>

当表单被提交时,在不同的浏览器中,目标URL的外观是不同的:

在Firefox中,它看起来像所期望的那样:

http://mydomain/items?fc[]=12345&fc[]=56789&utf8=✓

在 Chrome 中,方括号会被显示为 URL 编码(当使用多个方括号时,这样做会导致地址看起来非常丑陋和不专业)。

http://mydomain/items?fc%5B%5D=12345&fc%5B%5D=56789&utf8=✓

在IE9(及更早版本)中,所有内容都显示为URL编码:

http://mydomain/items?fc%5B%5D=12345&fc%5B%5D=56789&utf8=%E2%9C%93

虽然"utf8=..."部分只在IE中存在问题,但我可以容忍它。 但是,既然没有任何浏览器在URL中显式输入方括号时存在问题,所以我不明白为什么Chrome和IE需要显示带有URL编码的方括号,而Firefox则不需要。

由于表单的HTML代码在所有浏览器中都相同,我认为这与浏览器有关,而不是与该网站(本例中为Ruby on Rails网站)有关。

编辑: 因此,要澄清我的实际问题: 为什么会出现这种差异? 是否有一种方法可以使它在至少Chrome中看起来好一些? 可以通过不对href="..."进行URL转义来丑陋地修复它,但我认为那违反了URL编码规则?


1
那么你的问题是什么?它很丑吗? - Dan Kanze
我现在已经把问题澄清了一些! - foolo
你考虑过使用POST方法提交结果吗? - Dan Kanze
1
你的意思是什么?如果你想使用POST请求而不是GET请求,那是可以做到的,但这将不符合RESTful的原则。 - foolo
不同的浏览器可能对RFC 1738的解释不一样,我猜:http://meta.stackexchange.com/q/79057 - 11mb
1个回答

1

由于您想要共享这些链接(带有状态),我假设您预计您的链接将被分享、链接到网页、复制、发送电子邮件等。

很可能即使在浏览器之外(比如说,当您的链接被复制到其他页面、电子邮件等中),一些编码也会发生。如果您必须使用这些字符,那么某些不美观的地方可能会出现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接