【问题标题】:UTF-8 in anchors do not work in Safari锚点中的 UTF-8 在 Safari 中不起作用
【发布时间】:2014-10-21 05:21:58
【问题描述】:

我花了几个小时试图弄清楚为什么 UTF-8 字符不能与锚点一起使用,但我基本上没有想法。

以下已添加到 HTML 头部:<meta charset="UTF-8">

卷曲表明该文档显然是UTF-8:

HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Mon, 20 Oct 2014 18:13:28 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive

当我在 Safari 状态栏中查看链接的结果时,它呈现为:

http://localhost:80/#Forv%C3rres

但显然无法点击。

如果我在地址中输入正确,它会毫无问题地找到锚点:

http://localhost:80/#Forværres

【问题讨论】:

  • 你确定源文档真的是用 UTF-8 编码的吗? Safari 会在您的状态栏中呈现链接的 URL 编码形式,这本身并没有错,它本身也不意味着该链接是“不可点击的”。看起来 Safari 认为锚点包含一个带有(十六进制)代码 C3 的字符。 Unicode 字符 U+00C3 是带有波浪号的大写“A”,而您似乎正在寻找的字符是 U+00E6。在你责怪 Safari 之前,你应该检查你的页面是否在其他浏览器中工作。
  • @JohnBollinger,所有其他浏览器似乎都在工作。这是 Safari 的一贯问题,因此我也尝试了所有的 iOS 设备。我使用 TextMate 编辑我的文档,并且一如既往地将其设置为 UTF-8

标签: url encoding utf-8 safari anchor


【解决方案1】:

我的猜测是您将带有 UTF-8 字符的 URL 放在文档中,如下所示:

http://localhost:80/#Forværres

很遗憾,这不是一个有效的 URL。 URL 中的非 ASCII 字符不符合 RFC,即使某些浏览器支持它们。您必须像这样对编码的 UTF-8 字节序列进行百分比转义:

http://localhost:80/#Forv%C3%A6rres

如果您手动编辑 HTML 文件,这会很乏味,但如果您想严格遵守标准,这是唯一的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2014-05-03
    • 1970-01-01
    • 2015-03-22
    • 2011-04-07
    • 2018-12-02
    • 1970-01-01
    • 2020-01-23
    相关资源
    最近更新 更多