【发布时间】: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 请求期间值被破坏
有什么想法吗?谢谢!
【问题讨论】: