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

标签 html forms spring-mvc encoding freemarker

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

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

提前致谢

最佳答案

这个问题,正如所问的那样,是自相矛盾的:标题说 accept-charset参数不执行任何操作,而问题正文表示当 accept-charset使用属性(这是正确的术语),“ header 在请求 header 中具有不同的接受字符集选项”。我想后一个陈述中缺少一个否定。

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

accept-charset form 中的属性元素预计不会影响 HTTP 请求 header ,它也不会。它的目的是指定要用于请求中的表单数据的字符编码,这就是它的实际作用。 HTML 4.01 spec is obscure关于这个,但是 W3C HTML5 draft puts it好多了,尽管出于某些奇怪的原因使用复数:“给出要用于提交的字符编码”。我想原因是您可以指定替代编码,为浏览器无法使用您的首选编码的情况做准备。例如,Chrome 中实际发生的情况是,如果您使用 accept-charset="foobar utt-8" ,然后使用 UTF-8。

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

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

关于html - accept-charset ="UTF-8"参数在表单中使用时不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12830546/

相关文章:

html - Rails 复选框和 field_with_errors 问题

html - 导航栏事件元素在悬停时不应该改变颜色?

javascript - javascript 'if' 语句中使用的 Posted 变量立即消失

spring-mvc - 从 DB 获取 Blob 抛出 "invalid transaction handle"

java - 通过 HTTP PUT 请求上传文件

html - Bootstrap 下拉菜单隐藏导航链接

html - 未显示 HTML 中的 Logo 图像

javascript - 使用 JavaScript 在多个 HTML 输入字段值之间进行动态线性插值

javascript - 突出显示窗体边框不起作用

java - 将 Spring MVC 与 html 结合使用