据我所知,浏览器似乎必须在生成请求的表单的字符集中的请求中发送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:木
然后对%26%2326408%3B
进行适当的百分比编码。我确认IE 8在Windows中做同样的事情。那么UTF-8黑客的重点是什么?
相关问题:Detecting the character encoding of an HTTP POST request
答案 0 :(得分:2)
当不同的浏览器以不同的编码提交数据时,开发了一些添加一些特殊字符作为隐藏数据的技术。例如描述了在文档FORM submission and i18n中如下:“作者可以在表单中添加一个精心设计的”隐藏“字段,其中包含许多诊断字符。提交此字段后,服务器可以调查已提交内容的格式,并就客户端软件使用的编码得出一些结论。“
该技术已经失去了很多原始的相关性,但它仍然是一种廉价的方法来进行一些基本的正确性检查。它可以检测问题,例如当有人创建表单的副本并使用它(由于无知,粗心或其他原因)来提交数据,以便编码不是应该的。