将utf8 =✓添加到查询中有什么意义?

时间:2013-05-29 14:04:37

标签: http utf-8 character-encoding cross-browser html-escape-characters

据我所知,浏览器似乎必须在生成请求的表单的字符集中的请求中发送x-www-form-urlencoded数据。

那么,为什么有些网站(例如http://www.railscasts.com)会向表单添加?utf8 =%E2%9C%93(即?utf8 =✓)?这是一个让你更容易做事的黑客行为吗?该页面的字符集已经是UTF-8(我检查了标题),所以不能保证浏览器会发送UTF-8吗?什么浏览器不这样做?根据w3schools,所有主流浏览器都从表单中实现accept-charset:

<form accept-charset="UTF-8">

那么为什么不使用呢?或者根本没有(因为响应指定了UTF-8)?

我做了一些调查:

在UTF-8页面中,似乎搜索木(U + 6728)给出:

search:%E6%9C%A8

所以它使用百分比编码,这似乎是逐字节编码的十六进制编码,无论底层字符集是什么。嗯,这肯定有效,因为this place说这是UTF-8编码。这很好,但这是一个简单的例子,我试图将UTF-8数据发送到UTF-8页面。

现在让我们说我有一个ISO-8859-1页面上有一个表格。这是一个GET表单,我决定为一个字段输入相同的。那肯定不是ISO-8859-1。因此Chrome将其编码为

search:&#26408;

然后对%26%2326408%3B进行适当的百分比编码。我确认IE 8在Windows中做同样的事情。那么UTF-8黑客的重点是什么?

相关问题:Detecting the character encoding of an HTTP POST request

1 个答案:

答案 0 :(得分:2)

当不同的浏览器以不同的编码提交数据时,开发了一些添加一些特殊字符作为隐藏数据的技术。例如描述了在文档FORM submission and i18n中如下:“作者可以在表单中添加一个精心设计的”隐藏“字段,其中包含许多诊断字符。提交此字段后,服务器可以调查已提交内容的格式,并就客户端软件使用的编码得出一些结论。“

该技术已经失去了很多原始的相关性,但它仍然是一种廉价的方法来进行一些基本的正确性检查。它可以检测问题,例如当有人创建表单的副本并使用它(由于无知,粗心或其他原因)来提交数据,以便编码不是应该的。