accept-charset= "UTF-8"参数在表单中使用时不执行任何操作



我在表单中使用accept charset="utf-8"属性,发现当使用非ascii进行表单发布时,标头在请求标头中有不同的accept charset选项。我缺了什么吗?我的表格看起来像这个

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

提前感谢

正如所问的那样,这个问题是自相矛盾的:标题说accept-charset参数什么都不做,而问题主体说,当使用accept-charset属性(这是正确的术语)时,"标头在请求标头中有不同的接受字符集选项"。我想后一句话中少了一个否定词。

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

form元素中的accept-charset属性预计不会影响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编码发送,它可以处理任何字符。

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

相关内容

最新更新