JAVASCRIPT中UTF8页面提交数据乱码怎么办

1、FORM标签里加上accept-charset代码,这个能把FORM里的数据自动编码成指定的字符集提交,比如在UTF8页面提交数据到GB2312,代码就是accept-charset=”GB2312″,但accept-charset除了IE其他浏览器都支持。。。

2、这时可以在提交时触发JS,document.charset=’GB2312′;,用这段代码设置当前页面编码为GB2312。到这里看似很完美了,但还一个问题,就是触发这个代码后,当前页面刷新之后会乱码,这是因为你刚才改变了当前页面的编码。

3、怎么处理刷新后乱码呢,就是要加以判断,判断当前页面编码和默认的编码是否一致,如果不一致则刷新,if(isIE &&

 代码如下 复制代码
document.charset!=”utf-8″)location.reload(false)

4、网上的介绍最多到这步,但是我却发现,这样就步入了一个死循环,因为第2步已经改变了编码,您在当前页面不管怎样刷新,还是改变后的编码,所以一定要重设这个编码才行,代码就是这样的。

 代码如下 复制代码

if(isIE && document.charset!=”utf-8″){
document.charset=’utf-8′;
location.reload(false);}

代码综合起来如下:
判断当前页码是否为UTF8,如果不是,则设定编码为UTF8并刷新,避免乱码。

 代码如下 复制代码

var isIE=!!window.ActiveXObject;
if(isIE && document.charset!=”utf-8″){
document.charset=’utf-8′;
location.reload(false);}

设定FORM的accept-charset,让非IE浏览器直接提交编码后的数据到其他页面

 代码如下 复制代码
<form accept-charset=”GB2312″>

提交数据时触发修改当前页面编码的JS

 代码如下 复制代码
onsubmit=”if(isIE)document.charset=’GB2312′”

JavaScript中正确的URL编码方式
看过前面的示例,您有没有想过:为什么escape不能解决的问题,JQuery就能解决呢?

对于这个问题,我想还是先来看看MSDN中关于escape的说明(截图):

MSDN说的很清楚,我也没有必要再做解释。

不过,我想有人可能会问:我用POST提交数据呢?那可是不经过URL的。
是的,POST数据时,参数没有放在URL中,但是,仍然采用URL编码。
POST数据也采用URL编码,是因为:表单可以采用GET方式提交,那么数据将通过URL提交给服务器。
所以提交的数据都要经过URL编码。

我们再来看一下$.ajax是如何处理数据的提交过程的:

 代码如下 复制代码

ajax: function( origSettings ) {
    var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
   
    // ............... 去掉一些无关的代码

    // convert data if not already a string
    if (s.data && s.processData && typeof s.data !== "string") {
        // 注意下面这个调用
        s.data = jQuery.param( s.data, s.traditional );
    }

再来看jQuery.param的实现过程:

 代码如下 复制代码

// Serialize an array of form elements or a set of
// key/values into a query string
param: function( a, traditional ) {
    var s = [];
    // ............... 去掉一些无关的代码
   
    // If an array was passed in, assume that it is an array of form elements.
    if ( jQuery.isArray(a) || a.jquery ) {
        // Serialize the form elements
        jQuery.each( a, function() {
            add( this.name, this.value );
        });
       
    } else {
        // ............... 去掉一些非重点代码
    }

    // Return the resulting serialization
    return s.join("&").replace(r20, "+");

    function add( key, value ) {
        // If value is a function, invoke it and return its value
        value = jQuery.isFunction(value) ? value() : value;
        s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
    }
}

这段代码的核心就是add函数的实现了,它在内部调用了encodeURIComponent()函数。
我们应该注意JQuery对数据的处理方式:encodeURIComponent(key) + "=" + encodeURIComponent(value);
JQuery在最后还把%20还替换成 + 号了。

在WEB开发领域,我想大家对JQuery的权威应该不用怀疑吧? 所以我认为JQuery的方法肯定是正确的。

从JQuery的实现方式也可以看出:encodeURI()其实也是不推荐在编码URL数据时使用的。

说到这里,我要说说为什么不推荐使用encodeURI。
encodeURI用于对整个URL字符串进行编码,如果某个参数值本身包含一些特殊字符。
例如:key = "x?x/x&x", value = "aa=2&bb=3&cc=汉字。",这个函数的结果将会不正确。
它通常用于编码URL路径中包含有类似汉字这种场合,不适合处理URL参数。
但是,URL路径中的目录名与文件名,我们可以选择英文字符,所以encodeURI通常没有机会使用。

ajax乱码可参考 http://www.111cn.net/wy/js-ajax/44383.htm

时间: 2024-10-27 15:25:58

JAVASCRIPT中UTF8页面提交数据乱码怎么办的相关文章

ASP.NET MVC中前台页面提交数据到后台控制器

方式一: 数据存储模型Model:此方式未用到数据存储模型Model,仅简单的字符串string型数据传递 前台接收显示数据视图View:  代码如下 复制代码 <div style="height:300px; width:100%"> <div style="margin-left:100px;margin-top:50px;"> <input id="testData" type="text"

javascript中删除页面数据的问题

问题描述 javascript中删除页面数据的问题 在一个HTML程序的的地步引入了两个JS程序,现在我在HTML页面添加了一个删除按钮 <a href=""index.html""><input type=""button"" value=""Remove!"" id=""a"" onclick=""remo

jquery ajax post提交数据乱码_jquery

在用jquery处理html5的应用的时候,一直在firefox下测试都正常,用户用pad访问的时候说有乱码,自己试验了下果然,后发现chrome和ie内核下都是有此问题,此问题设置了页面属性为utf-8时候,只有firefox是传的charset=utf-8的头文件chrome和ie都没有指定,所以出现乱码问题.解决方法: 复制代码 代码如下: $.ajaxSetup({  contentType: "application/x-www-form-urlencoded; charset=utf

.net执行页面提交数据到mysql数据库报错,求指导

问题描述 .net执行页面提交数据到mysql数据库报错,求指导 * 别人那里是不报错的,就我本地会报错,而且我的 代码也全是svn上下载下来的. 解决方案 mysql.data.dll这个直接考一遍,重新引用 解决方案二: 直接考一遍再重新引用没有用的

使用PHP socke 向指定页面提交数据_php技巧

在jquery里用 load post 等等,无法得到我想要的结果!于是突然-----这几天想的东西都白想了,现在只好这样了 现在想在php里面向指定的页面提交数据,应该有,还可以有返回值 于是找了这个函数,不过没有试,我想可以不知道空间能不能通得过 是村里拿来的!  复制代码 代码如下: <?php /*----------------------------------------------------------- *功能:使用PHP socke 向指定页面提交数据 * *作者:Hong

Javascript使用post方法提交数据实例_javascript技巧

本文实例讲述了Javascript使用post方法提交数据的方法.分享给大家供大家参考.具体如下: 使用JS提交数据时,可以调用本方法实现post方式的提交. var jsPost = function(action, values) { var id = Math.random(); document.write('<form id="post' + id + '" name="post'+ id +'" action="' + action +

MySQL中UTF8编码的数据在cmd下乱码

花了一下午,解决MySQL在Windows的cmd下中文乱码的问题. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 mysql> use abc; Database changed mysql> select * from school; +----------+--------------------+-------------------------------------------+ | schoolid | name               | address 

Javascript中如何实现关联数据查询

本文介绍如何利用Javascript从DBpedia中获取我们想要的数据. DBpedia的作用:对Wikipedia的数据变成Linked Data形式,使得机器也能读懂并自由获得这些数据. SPARQL Trying to use the Semantic Web without SPARQL is like trying to use a relational database without SQL. -- Tim Berners-Lee SPARQL是Semantic Web(语义网)

Javascript中CTRL+回车提交表单

<script type="text/javascript"> //<![CDATA[ Javascript 函数: Ctrl+回车 提交表单 // 例: <textarea name="textarea" onKeyDown="submitForm(this.form.name)"></textarea> // 注意: Form 必须有 Name 或 ID function submitForm(for