【问题标题】:UTF-8 GET URL encoding issue in SafariSafari 中的 UTF-8 GET URL 编码问题
【发布时间】:2015-10-08 16:11:05
【问题描述】:

我们有一个表单 (method="GET") 提交到执行搜索的 PHP 页面。我们的一位越南用户在 Safari 中看到一个问题,其中 URL 中的值(由 Safari 在表单提交期间放在那里)与我们在 Chrome et 中看到的编码不同。人。

有问题的表单元素看起来像这样,非常简单:

<select id="province" name="province" class="inputbox" size="1"><option value="">Vui lòng chọn ...</option><option value="Thành phố Cần Thơ" class="">Thành phố Cần Thơ</option></select>

选择第二个选项并点击提交后,Safari中的URL包含:

index.php?province=Thành+phố+Cần+Thơ

从 Safari 的开发者网络选项卡中,我可以看到它被请求为: 请求网址:

index.php?province=Th%C3%A0nh+ph%E1%BB%91+C%E1%BA%A7n+Th%C6%A1&

在 Chrome 中,执行完全相同的搜索,我看到的 URL 为

index.php?province=Tha%CC%80nh+ph%C3%B4%CC%81+C%C3%A2%CC%80n+Th%C6%A1

请注意,它有点长。 HTML 呈现方式也略有不同。请参阅左侧的 Safari 和右侧的 Chrome:

http://screencast.com/t/hV7PilKRB4gF

此页面的响应标头是“Content-Type:text/html; charset=utf-8” HTML 字符集是

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

当服务器从 Safari 获取内容时,查询子句如下所示:

http://screencast.com/t/ZrUrATbVgkS

(我不得不在这里使用截图,因为复制查询消除了字符的视觉差异)

当服务器收到来自 Chrome 的请求时,它看起来像这样:

REPLACE(province,' ','') = 'ThànhphốCầnThơ'

Chrome 返回正确结果,Safari 不返回任何结果。

将 URL 编码参数从 Chrome 复制并粘贴到 Safari 会产生正确的结果。 (这些请求之间没有视觉差异),可能意味着 Safari 在 URL 中输入的值不正确,但是当存在正确的值时,它会请求正常。

我不确定以下哪一项可能是问题所在: 1) 值没有以正确的编码/格式进入 HTML 2) 在 Safari 的 FORM GET 请求期间值被破坏

有什么想法吗?谢谢!

【问题讨论】:

    标签: encoding utf-8 safari


    【解决方案1】:

    您可以使用 rawurlencode("Thành phố Cần Thơ") 而不是原始字符串来设置此选项(理想情况下是所有其他选择选项)的值

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      相关资源
      最近更新 更多