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

ins*_*iac 8 html forms encoding freemarker spring-mvc

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

<form method="post" action="controller" accept-charset="UTF-8">
..input text box
.. submit button
</form>
Run Code Online (Sandbox Code Playgroud)

提前致谢

Juk*_*ela 8

正如所提出的那样,问题是自相矛盾的:标题表示accept-charset参数没有做任何事情,而问题正文表示当使用accept-charset属性(这是正确的术语)时,"标题具有不同的接受字符集选项请求标题".我想后一种说法中缺少否定.

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

预计元素中的accept-charset属性form不会影响HTTP请求标头,也不会影响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编码的形式发送,它可以处理任何角色.

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

  • 您的 Chrome 版本是什么?Accept-Charset 已过时,您不应再依赖它:https://code.google.com/p/chromium/issues/detail?id=112804 (2认同)