? 如果服務器編碼為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");即可