【问题标题】:Encoded URL with square brackets. Different behaviour in Chrome/Firefox/IE带方括号的编码 URL。 Chrome/Firefox/IE 中的不同行为
【发布时间】:2013-02-10 00:49:45
【问题描述】:

我有一个看起来像这样的链接(有点难看,因为它是 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>

提交表单时,目标网址在不同浏览器中看起来不同:

在 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,而不是 Firefox 必须显示带有 URL 编码的方括号。

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

编辑: 所以要澄清我的实际问题: 为什么这不一样? 有没有办法让它至少在 Chrome 中看起来不错? 它可以通过在 href="..." 中不进行 URL 转义来修复,但我认为这违反了 URL 编码规则?

【问题讨论】:

  • 那么你的问题是什么?丑吗?
  • 是的 :) 我现在已经澄清了一些问题!
  • 您考虑过发布结果吗?
  • 什么意思?如果你打算使用 POST 请求而不是 GET,它可以完成,但不会是 REST-ful。
  • 我猜不同的浏览器对 RFC 1738 的解释不同:meta.stackexchange.com/q/79057

标签: html url cross-browser escaping


【解决方案1】:

当您想要共享这些链接(有状态)时,我想您预计您的链接将被共享、从网页链接、复制、通过电子邮件发送等。

即使在浏览器之外(例如,您的链接被复制到其他页面、电子邮件等),也可能会发生一些编码。如果你必须使用这些字符,你可能不得不接受丑陋会出现在某个地方。

【讨论】:

    猜你喜欢
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多