`
conkeyn
  • 浏览: 1506534 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

获取form post的charset【改造版】

    博客分类:
  • HTML
阅读更多

前面提到过我的一个低级失误并对servlet的setCharacterEncoding有了正确认识。

主要是基于这么一个思路解决我的问题:

<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>  
...  
  
<form method="post" action="/servlet" accept-charset="utf-8">  
	<input type="hidden" name="_charset_"/>  
	<input type="text" name="text"/>  
	<input type="submit" value="Submit"/>  
</form> 

 

这个表单配合原来在weblogic下写的filter代码,在IE和firefox下运行正常。但既然遵循servlet规范,不能在filter中通过_charset_这个request参数来获取浏览器对post body的真实编码,只能想点歪门邪道了。向jsessionid取经,这个表单改成这样:(关于URL中的分号,请参考RFC1738,这里有个中文版)

 

<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>    
...  
<form method="post" action="/servlet;_charset_=utf-8" accept-charset="utf-8">  
	<input type="hidden" name="_charset_"/>  
	<input type="text" name="text"/>  
	<input type="submit" value="Submit"/>  
</form>  

 

filter的改造就略了,无非是hack下request uri。幸好遗留应用并不需要url中重写jsessionid。wink

测试,运行,firefox正常了,IE又不正常。哦,恍然大雾啊,原来firefox是严格的根据accept-charset来编码,若accept- charset不存在,则按response或者meta http-equiv="Content-Type"中的声明来编码,最后把编码方式放到_charset_隐藏域。而IE还是顽固的只按照 response或者meta http-equiv="Content-Type"中的声明来编码,并把编码方式放到_charset_隐藏域。原来IE无视accept- charset的存在。我原先一直以为_charset_隐藏域只是IE对accept-charset的一个强制辅助呢,又一个一知半解的典型...

得了,只能让firefox和IE同流合污了。最终,表单变成这样:

<meta http-equiv="Content-Type" content="text/html; charset=gbk"/>   
...  
<form method="post" action="/servlet;_charset_=gbk">  
	<input type="text" name="text"/>  
	<input type="submit" value="Submit"/>  
</form>

 在IE和firefox下均测试通过。

 

http://sorphi.iteye.com/blog/177716

 

分享到:
评论

相关推荐

    调用pb开发的webserver(HTTP POST)

    调用pb开发的webserver(HTTP POST) .../*获取结果 HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Content-Length: length &lt;short xmlns="http://webi.org"&gt;short*/ //出参是json格式{"statusCode":"2"}

    解决axios post 后端无法接收数据的问题

    在后端 允许跨域的情况下,axios post 将数据传到后端,但是后端无法接收,始终为空 请求能正常到达后端,那么肯定传数据的地方的问题了 所以这里headers设置为 headers:{"Content-Type":'application/x-...

    jqueryform.js

    type:"post", dataType:"json", //data:{reviewer:encodeURI(reviewer)}, contentType: "application/x-www-form-urlencoded; charset=GBK", // headers:{"ClientCallMode" : "ajax"},//添加请求头部 enctype=...

    计算机病毒与防护:PHP表单处理(POST).ppt

    实例:form表单触发POST请求 &lt;html&gt; &lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;title&gt;POST请求&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;form action="post.php" method="post"&gt; 名字: &lt;input type="text" name="fname"&gt; 年龄: ...

    jQuery的ajax发送FormData的方式

    meta charset="UTF-8"&gt; &lt;title&gt;Document&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;form id="form"&gt; &lt;input type="text" name="username"&gt; &lt;input type="file" name="file"&gt; &lt;...

    ajax快速解决参数过长无法提交成功的问题

    查了很多资料都说,get方法的参数是有限制的,post方法的参数的长度是无限制,这也是post相比get的优势一直。 在ajax中使用post方法,用常规的参数格式:param1=a1&param2=a2 ,当参数长度过长时,依然提交不成功。...

    Web应用安全:HTTP协议GET和POST的使用区别实验.docx

    实验一:HTTP协议POST 实验目的 通过ajax实例深入理解http协议之post方法。 二、实验用到的工具软件 ...&lt;form action="a2.php" name="form1" method="post"&gt; 姓名: 年龄: &lt;input type="submit" value="

    PHP通过get方法获得form表单数据方法总结

    那么本篇文章主要就给大家详细介绍其中的get方法即PHP通过get变量获取form表单数据的具体方法以及用处,后期文章中再继续给大家介绍post的具体用法作用。 下面给大家带来具体的代码示例: 1、form表单代码示例(表单...

    Form Editor-crx插件

    语言:English 用于编辑对Web服务器的...支持编辑表单accept-charset。 版本1.3 1.支持保存提交历史记录。 版本1.3.3 1.更新到清单V2。 您可以在这里找到源代码:https://github.com/zsxwing/Form-Editor欢迎任何贡献。

    angularjs $http实现form表单提交示例

    需求:请求第三方后台接口返回一段html字符串如下,由前端去实现form表单的POST提交, 说明:form表单submit()实现自动提交input标签hidden,注意script代码中的document.redirect.submit(); &lt;html&gt; &lt;...

    springboot后台接收axios传递的json数据为null

    后台接收到的数据一直显示null 原因: 使用@RequestBody标签接收json...charset=utf-8。 后台接收请求的方法的参数可以用String类型 @RequestBody 是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或

    如何防止INPUT按回车自动提交表单FORM

    form action="http://blog.csdn.net/gnail_oug" method="post"&gt; &lt;!--input获得焦点后按回车form自动提交--&gt; &lt;input type="text"&gt; &lt;/form&gt; &lt;/body&gt; &lt;/html&gt; 有多个input时(不管是否...

    http/https请求工具类

    public static String REQUEST_METHOD_POST = "POST"; public static String REQUEST_METHOD_GET = "GET"; // 媒体类型 public static String MIME_TYPE_FORM = "application/x-www-form-urlencoded;charset=...

    Python中使用django form表单验证的方法

    一. django form表单验证引入  有时时候我们需要使用get,post,put等方式在前台HTML页面提交...form action="url" method="post" enctype="multipart/form-data"&gt;{% csrf_token %} &lt;input type="text" name="us

    HttpClient以及获取页面内容应用

    public void postForm() { // 创建默认的httpClient实例. CloseableHttpClient httpclient = HttpClients.createDefault(); // 创建httppost HttpPost httppost = new HttpPost(...

    表单验证大全

    FORM METHOD=POST ACTION=""&gt; &lt;input type="password" id="input1"&gt; &lt;input type="password" id="input2"&gt; &lt;input type="button" value="test" &lt;/FORM&gt; [removed] function check() { with...

    AngularJS下$http服务Post方法传递json参数的实例

    本文主要介绍如何使用Angularjs $http服务以POST方法向服务器传递json对象数据。 具体如下: 一、$http POST方法默认提交数据的类型为application/json var data = {'wid':'0', 'praise' :...charset=utf-8 {'wid':'0

    jquery ajax post提交数据乱码

    在用jquery处理html5的应用的时候,一直在...解决方法: 代码如下:$.ajaxSetup({ contentType: “application/x-www-form-urlencoded; charset=utf-8”});$.post(“test.php”, { name: “i5a6”, time: “2pm” }, 

    SpringBoot文件上传.docx

    &lt;!... &lt;meta charset="UTF-8"&gt; ... &lt;form action="fileUploadController" method="post" enctype="multipart/form-data"&gt; 上传文件:&lt;input type="file" name="filename"/&gt; &lt;/form&gt; &lt;/html&gt;

    AJAX使用post发送数据xml格式接受数据

    用POST发送数据,在2号线函数(也是ajax发送数据的函数:ajaxCall)必须加上一句:xmlObject.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”); 接着使用xmlObject.send(data);发送 2.3...

Global site tag (gtag.js) - Google Analytics