磨刀不误砍柴工

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。

   ::  ::  ::  :: 管理
  如果服务器编码为GBK,在使用jquery autocomplete插件的时候会出现乱码。
1.服务器接收autocomplete的请求中有中文出现乱码
   需要在autocomplete发送请求时对请求的参数按GBK进行编码,但JS 的encodeURI 方法只能采用默认的UTF-8编码
我们借助一段VB代码进行转换:

Function URLEncoding(vstrIn)
    
dim i
    strReturn 
= ""
    
For i = 1 To Len(vstrIn)
        ThisChr 
= Mid(vStrIn,i,1)
        
If Abs(Asc(ThisChr))  &HFF and Abs(Asc(ThisChr))<>&H25 and Abs(Asc(ThisChr))<>&H26 Then
            strReturn 
= strReturn & ThisChr
        
ElseIf Abs(Asc(ThisChr))=&H25 or Abs(Asc(ThisChr))=&H26 then
            strReturn 
= strReturn & "%" & Hex(Asc(ThisChr))
        
Else
            innerCode 
= Asc(ThisChr)
            
If innerCode  0 Then
                innerCode 
= innerCode + &H10000
            
End If
            Hight8 
= (innerCode  And &HFF00)\ &HFF
            Low8 
= innerCode And &HFF
            strReturn 
= strReturn & "%" & Hex(Hight8) &  "%" & Hex(Low8)
        
End If
    
Next
    URLEncoding 
= strReturn
End Function

				下载 URLEncoding.js
		
				
在调用页面可以用如下方式引入:
 





 
如何让jquery autocomplete发送时调用URLEncoding.js进行GBK编码呢?
可以修改jquery.autocomplete.js文件:
$.ajax({
                
// try to leverage ajaxQueue plugin to abort previous requests
                mode: "abort",
                
// limit abortion to this input
                port: "autocomplete" + input.name,
                dataType: options.dataType,
                url: options.url,
                data: $.extend({
                    q: lastWord(term),
                    limit: options.max
                }, extraParams),
                success: 
function(data) {
                    
var parsed = options.parse && options.parse(data) || parse(data);
                    cache.add(term, parsed);
                    success(term, parsed);
                }
            });
 
为:
$.ajax({
                
// try to leverage ajaxQueue plugin to abort previous requests
                mode: "abort",
                
// limit abortion to this input
                port: "autocomplete" + input.name,
                dataType: options.dataType,
                url: options.url,
                data: $.extend({
                    q: URLEncoding(lastWord(term)),
                    limit: options.max
                }, extraParams),
                success: 
function(data) {
                    
var parsed = options.parse && options.parse(data) || parse(data);
                    cache.add(term, parsed);
                    success(term, parsed);
                }
            });
 
下载修改后的autocomplete.js
				
2.autocomplete 接收的结果中有中文乱码
 只需设置 response.setCharacterEncoding("UTF-8");即可
				
						
				
posted on 2010-10-26 11:52 liwei5891 阅读(2559) 评论(2)  编辑  收藏 所属分类: Javascript

Feedback

# re: jquery autocomplete GBK 乱码解决 2012-03-27 14:51 maoxiaozhu3210
您好!我下载了您的autocomplete.js这个不好使啊  回复  更多评论
  

# re: jquery autocomplete GBK 乱码解决 2012-04-13 17:10 weiwei
@maoxiaozhu3210
你好!确实如您所说,不好使。

因为忽略了一点,在后台接收后还要做一次转码:
String roadSearchName = request.getParameter("q");//查询参数
if(StringUtils.isNotBlank(roadSearchName) && limit>0){
roadSearchName = java.net.URLDecoder.decode(roadSearchName,"GBK");//转码

这样做了以后应当就可以了。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: