标签为 "乱码" 的存档

jqGrid查询中文乱码问题解决办法

jqGrid是我用过最好的基于jQuery的列表插件,在项目中试用后效果很不错,基于jQuery UI的界面美观并且可以更好皮肤……

花了一天时间实现了增删改和查询功能,但是在查询中文的时候遇到了乱码问题……诡异,说一下情况:

  • 我的开发环境是全站UTF-8,而且有编码Filter;
  • jqGrid版本为:3.6.4

在后台断点调试发现如下特点:

1、新增、编辑没有乱码问题

2、查询中文后台时得到的参数是乱码

然后就考虑了,如果是开发环境问题那肯定全部都有乱码问题,所以问题应该在jqGrid的查询函数里面,最后通过Firebug找到了:

c.find(".ui-search").click(function() {

这一行是查询功能的开始也就是点击“查询”的触发函数

所以根据以往的经验在这里把参数值编码一次就可以了,也就是encodeURIComponent函数具体修改如下:

  1. 找到第6202行
  2. 找到代码
    6201
    6202
    6203
    
    var p = jQuery(this).find("select[name='field'] :selected").val(),
    g = jQuery(this).find("select[name='op'] :selected").val(),
    f = jQuery(this).find("input.vdata,select.vdata :selected").val();
    
  3. 现在看到这里的3行代码就是查询时获取参数的3个变量,我们要修改的就是这里,最终代码:
    6202
    6203
    6204
    
    var p = encodeURIComponent(jQuery(this).find("select[name='field'] :selected").val()),
    g = encodeURIComponent(jQuery(this).find("select[name='op'] :selected").val()),
    f = encodeURIComponent(jQuery(this).find("input.vdata,select.vdata :selected").val());
    

到此大功告成

——————————–分割线———————————–

为了方便网友顺便提供本人修改后的jqGrid3.6.4版本的源码,分为3中类型(未压缩、迷你版、压缩版pack)

下载:jquery.jqGrid.3.6.4.js 共 149 次

下载:jquery.jqGrid.min.3.6.4.js 共 127 次

下载:jquery.jqGrid.pack.3.6.4.js 共 98 次

Popularity: 24%

站点GBK编码下jQuery Ajax中文乱码解决方案

哎,还是老话题,一直缠绕着国人……

现在来个快刀斩乱麻,let’s go
由于项目前期使用的是1.2.6版本,后期使用的是1.3.2版本,所以分开来讲;

说说实现的办法,有点暴力——直接修改jQury源码,不过不用担心,不会影响整体功能而且就修改几行代码就可以解决乱码,也就是在发送请求的时候把参数值再进行一次转码,修改的方法为param

1、jQuery 1.2.6 乱码解决办法

  • 打开1.2.6版本的源文件
  • 找到第2911、2921、2924行,分别修改对应参数值的地方包裹一层encodeURIComponent即可,修改后的结果如下:
    param: function( a ) {
                    var s = [];
     
                    // If an array was passed in, assume that it is an array
                    // of form elements
                    if ( a.constructor == Array || a.jquery )
                            // Serialize the form elements
                            jQuery.each( a, function(){
                                    s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent(encodeURIComponent( this.value )) );
                            });
     
                    // Otherwise, assume that it's an object of key/value pairs
                    else
                            // Serialize the key/values
                            for ( var j in a )
                                    // If the value is an array then the key names need to be repeated
                                    if ( a[j] && a[j].constructor == Array )
                                            jQuery.each( a[j], function(){
                                                    s.push( encodeURIComponent(j) + "=" + encodeURIComponent(encodeURIComponent( this )) );
                                            });
                                    else
                                            s.push( encodeURIComponent(j) + "=" + encodeURIComponent(encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] )) );
     
                    // Return the resulting serialization
                    return s.join("&").replace(/%20/g, "+");
            }
    
    下载:jquery-encode-gbk.1.2.6.js 共 489 次
    下载:jquery-encode-gbk.pack.1.2.6.js 共 405 次

2、jQuery 1.3.2 乱码解决办法

1.3.2的就不用这么麻烦了,因为这个版本简化了param方法的结构,只需要修改一行代码即可,因为只有一个地方转码了

找到第3737行,同样包裹一层encodeURIComponent,结果如下:

        param: function( a ) {
                var s = [ ];
 
                function add( key, value ){
                        s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(encodeURIComponent(value));
                };

下载:jquery-encode-gbk-1.3.2.js 共 856 次
下载:jquery-encode-gbk-.pack.1.3.2.js 共 849 次

重要说明:后台必须要转码:java.net.URLDecoder.decode(request.getParameter(“name”), “UTF-8″)

Popularity: 100%