转自:http://www.diybl.com/course/1_web/webjs/200824/99236.html
在跨业务、跨网站发送数据或者业务升级的时候,我们有的时候需要指定发送数据的编码方式,比如页面是utf-8编码的,而发送出去的数据却希望是GB2312编码的。在做Ajax开发的时候,我们往往都是用vbscript或者用查字典法来解决这个问题(http://www.blogjava.net/emu/articles/31756.html)。但是有些业务,也许并不需要做成Ajax这么复杂,用表单提交显得更加自然。
其实html里面form标签有个accept-charset属性,可以帮助我们解决这个问题,可惜的是傻乎乎的IE浏览器虽然认得accept-charset,却并不卖它的帐。IE的表单提交的时候使用什么编码是完全看页面的charset决定的。还好,IE在charset这个问题上一傻到底(见http://www.blogjava.net/emu/archive/2007/08/21/138247.html),糊弄它一下,它就乖乖听话了:
<HTML>
<HEAD>
<meta http-equiv=content-type content="text/html; charset=UTF-8">
<SCRIPT LANGUAGE="JavaScript">
var isIE=!!window.ActiveXObject;
if(isIE && document.charset!="utf-8")location.reload(false);
</SCRIPT>
<TITLE>encode before form post</TITLE>
<META NAME="Author" CONTENT="emu">
</HEAD>
<BODY>
<form action="#" accept-charset="GB2312" onsubmit="if(isIE)document.charset='GB2312'">
<input name="test" value="我" readonly>
<input type=submit>
</form>
</BODY>
</HTML>
简单的讲,就是在表单发送前告诉IE说当前页面是GB2312编码就行了:
<form accept-charset="GB2312" onsubmit="if(isIE)document.charset=''GB2312''">
accept-charset="GB2312" 是写给其他没那么笨的浏览器看的。
IE为了表现它确实是一傻到底,不但在设置document.charset的时候不会用新的编码解释页面,还会在前进后退(我特地用#作为action来实现后退)的时候又尝试用新的编码去解释页面。不过还好,可以用脚本判断出来,还可以用脚本刷新一下页面解决这个问题:
if(isIE && document.charset!="utf-8")location.reload(false);
例:提交到百度
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="publisher" content="TideCMS">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>表单提交</title>
<body>
<form action="http://www.baidu.com/s" name="f" accept-charset="GBK" onsubmit="document.charset='GBK'" target="_blank"><input type="text" maxlength="100" size="42" id="kw" name="wd" autocomplete="off"/> <input type="submit" id="sb" value="百度一下"/><span id="hp"><a href="/gaoji/preferences.html">设置</a><br/><a href="/gaoji/advanced.html">高级</a></span></form>
</body>
</html>
分享到:
相关推荐
总结来说,这个AJAX表单提交实例展示了如何使用纯JavaScript实现无刷新的表单提交,通过封装函数提高了代码复用性,并允许开发者自定义数据处理和结果展示的方式。在实际开发中,这可以极大地提高用户体验,因为用户...
通常情况下,表单提交通过点击提交按钮触发,但在某些场景下,为了提高用户体验,开发者会选择使用键盘事件(如按Enter键)来触发表单提交。 #### 二、使用Java技术实现表单提交 虽然题目中提到“应用Java技术实现...
此外,该参数还有一个功能,就是在 JSP 中不指定 contentType 属性,也不使用 response.setCharacterEncoding 方法指定编码方式时,服务器响应的编码方式以及浏览器的编程方式就是此时 pageEncoding 指定的编码方式...
CSS样式控制和META标签在IE浏览器中的作用及实现表单提交记录历史记录的原理 1. 网页文档类型声明(DOCTYPE): 在HTML文件的开头通常会有一个文档类型声明(DOCTYPE),它用于告诉浏览器该页面使用哪种HTML或XHTML...
1. **使用传统的表单提交**:如果数据是简单的键值对,可以考虑使用HTML表单进行POST提交,这种方式在所有浏览器中都是兼容的。 2. **使用第三方库**:jQuery等库在早期就已经处理了IE6的兼容性问题,使用它们可以...
2. action属性:用于指定表单数据提交的URL地址,即当表单提交时,数据将被发送到action属性所指向的URL。 3. elements属性:这是一个表单中所有控件的集合,类型为HTMLCollection,可以用来操作表单中的各个控件。...
9. 防止表单默认行为:在处理表单提交的JavaScript函数中,通常需要返回false以防止表单的默认提交行为。这是因为尽管表单数据通过AJAX提交了,但浏览器默认还会尝试以常规方式提交表单,导致页面刷新或跳转。 从...
本问题中,用户遇到了一种特殊的情况,即在一个使用UTF-8编码的页面上填写的表单数据在提交到使用GB2312编码的服务器后出现乱码,从而导致查询结果异常。 `accept-charset` 是HTML表单元素`<form>`的一个属性,它...
通过这种方式,ASP开发者可以利用XMLHTTP对象实现与浏览器相似的功能,包括模拟用户表单提交和携带cookies,从而绕过某些验证机制。然而,值得注意的是,这种做法可能涉及到隐私和安全问题,因为它允许跨站请求,有...
enctype 属性规定了在发送到服务器之前应当如何对表单数据进行编码,默认的编码是 application/x-www-form-urlencoded。但是,对于文件上传,需要使用 multipart/form-data 作为 enctype 属性值。 四、文件预览的...
在Web开发过程中,使用JQuery的ajaxSubmit方法进行表单提交时,中文乱码问题是一个常见的困扰。中文乱码问题通常发生在数据的提交和接收过程中,由于字符编码的不一致导致。为了解决这个问题,首先需要了解JQuery的...
在文件上载和表单提交的过程中,有两个指的关心的问题,一是上载的数据是是采用的那种方式的编码,这个问题的可以从 Content-Type 中得到答案,另一个是问题是上载的数据量有多少即 Content-Length ,知道了它,就...
对于URL,IE6有一个选项“以UTF-8发送URL”,这个设置会影响URL中包含的中文参数的编码方式。 2. **Tomcat的URIEncoding配置**: Tomcat默认的URIEncoding是ISO-8859-1,不支持中文。为了解决GET请求中的中文乱码...
1. **字符与汉字的区别**:在计算机编码中,英文字符(半角字符)通常占用1字节空间,而中文字符(全角字符)则占用2字节空间。 2. **计算输入长度**:为了准确判断用户输入是否超过了限制,我们需要编写逻辑来正确...
例如,Java程序与使用GBK或UTF-8等不同编码方式的数据库交互时,如果没有正确处理字符集转换,乱码就可能出现。 客户端方面,乱码问题通常发生在两个阶段:输入解码和输出编码。输入解码时,浏览器接收服务器返回的...
IE6、7、8在处理文件上传时与其他现代浏览器(如Firefox、Chrome)存在差异,因此需要特殊的处理方式。 1. **JSP基础知识**: JSP(JavaServer Pages)是Java平台上的动态网页技术,它允许开发者将Java代码嵌入...