11

我在表单中使用了 accept-charset="utf-8" 属性,发现当使用非 ascii 发布表单时,标头在请求标头中有不同的接受字符集选项。我有什么遗漏吗?我的表格看起来像这样

<form method="post" action="controller" accept-charset="UTF-8">
..input text box
.. submit button
</form>

提前致谢

4

1 回答 1

9

正如所问的,这个问题是自相矛盾的:标题说accept-charset参数不做任何事情,而问题主体说当使用accept-charset属性(这是正确的术语)时,“标题有不同的接受字符集选项请求标头”。我想后一个陈述中缺少否定。

浏览器Accept-Charset根据自己的原则和设置在 HTTP 请求头中发送参数。例如,我的 Chrome 发送Accept-Charset:windows-1252,utf-8;q=0.7,*;q=0.3. 这样的标头通常会被服务器端软件忽略,但它可以用于(并且它被设计用于)确定在服务器响应中使用哪种编码,以防服务器端软件(表单处理程序,在这种情况下)能够在响应中使用不同的编码。

元素中的accept-charset属性form预计不会影响 HTTP 请求标头,它也不会。它旨在指定用于请求中表单数据的字符编码,这就是它的实际作用。HTML 4.01 规范对此并不明确,但W3C HTML5 草案对此进行了说明,尽管出于某些奇怪的原因使用了复数形式:“给出用于提交的字符编码”。我想原因是您可以指定替代编码,以准备浏览器无法使用您首选编码的情况。例如,在 Chrome 中实际发生的情况是,如果您使用accept-charset="foobar utt-8",则使用 UTF-8。

在实践中,该属性用于使数据提交的编码与包含表单的页面的编码不同。假设您的页面采用 ISO-8859-1 编码,并且有人在您的表单中输入了希腊语或希伯来语字母。浏览器必须进行一些错误恢复,因为这些字符无法在 ISO-8859-1 中表示。(实际上,他们将字符转换为数字字符引用,这在逻辑上都是错误的,但实际上可能是他们能做的最好的。)<form charset=utf-8>在这里使用帮助:无论编码是什么,表单数据都将以 UTF-8 编码发送,它可以处理任何字符。

如果您想告诉表单处理程序在其响应中应该使用哪种编码,那么您可以为此在表单中添加一个隐藏(或非隐藏)字段。

于 2012-10-11T06:15:14.073 回答