Edu*_*rch 12 forms post tomcat content-type character-encoding
一个简单的HTML文件:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="POST" action="test.jsp" accept-charset="utf-8" method="post" enctype="application/x-www-form-urlencoded" >
<input type="text" name="P"/>
<input type="submit" value="subMit"/>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
HTML文件由服务器使用标头提供Content-Type:text/html; charset=utf-8.一切都说:"亲爱的浏览器,当你发布这个表格,请发布utf-8编码".浏览器实际上是这样做的.输入字段中输入的每个值都将采用UTF-8编码.但是浏览器不会告诉服务器这个!post请求的HTTP头将包含一个Content-Type:application/x-www-form-urlencoded字段,但字符集将被省略(使用FF3.6和IE8测试).
问题是我使用的应用程序服务器(Tomcat6)期望Content-Type标头中的字符集(如RFC2388中所述).像这样:Content-Type:application/x-www-form-urlencoded;charset=utf-8.如果省略字符集,它将采用ISO-8859-1,它不是用于编码的字符集.结果是数据损坏.
是否有人知道如何强制当前浏览器将charset附加到Content-Type标头?
bob*_*nce 11
是否有人知道如何强制当前浏览器将charset附加到Content-Type标头?
不,没有浏览器曾提供过媒体类型的charset参数application/x-www-form-urlencoded.更重要的是,定义该类型的HTML规范没有提出charset参数,因此服务器无法合理地期望得到一个参数.
(HTML4 确实期望提交charset的子部分multipart/form-data,但即使在这种情况下,也没有浏览器实际符合.)
接收字符集= "UTF-8"
accept-charset在IE中被破坏,不应该使用.对于作为UTF-8的页面中的表单,它不会产生任何影响,但在其他情况下,它最终会产生不一致的结果.
不,用表格你就必须成为他们在为UTF-8是网页,结果应该回来为UTF-8(无识别标志,告诉你,(除了潜在的_charset_黑客攻击,但没有按Tomcat的"支持那个).
因此,如果您不希望它回退到默认值(通常是错误的),您必须告诉Servlet容器用于参数的编码.在一组有限的情况下,您可以调用ServletRequest.setCharacterEncoding()此方法,但这往往很脆弱,并且对于从查询字符串中获取的参数根本不起作用.遗憾的是,没有标准化的Servlet级别修复.对于Tomcat,您通常需要使用server.xml,而不是能够在应用程序中修复它.
| 归档时间: |
|
| 查看次数: |
17425 次 |
| 最近记录: |