1. 程式人生 > >js對url網頁地址中文亂碼問題的處理方法

js對url網頁地址中文亂碼問題的處理方法

先看例子:

有這麼一個網頁地址:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=不等式的解法(分析法、綜合法、比較法).

當我們直接複製網址內容到其他地方看,就會變成:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=%E4%B8%8D%E7%AD%89%E5%BC%8F%E7%9A%84%E8%A7%A3%E6%B3%95%EF%BC%88%E5%88%86%E6%9E%90%E6%B3%95%E3%80%81%E7%BB%BC%E5%90%88%E6%B3%95%E3%80%81%E6%AF%94%E8%BE%83%E6%B3%95%EF%BC%89。

這個就是因為瀏覽器對url路徑預設編碼了。而且,不同的瀏覽器對url的編碼是不一樣的。

這個只是表象。問題不是這個,問題是在我們去取kname值的時候,得到的就是後面那一大串亂七八糟的東西。這樣,我們就不能在程式裡面做後續操作了。

怎麼辦呢?

現在我就直接告訴大家處理問題的辦法,可能我的處理方法對你遇到的問題不能解決,但是至少能解決我出的這個問題。那就寫出來跟大家分享下:

1,首先,在傳地址的時候就先轉碼:

我的程式碼中是這樣的:

<a href="http://www.17xmf.com/index.php?act=exercises&kd=22&kname=encodeURI(我的考試)">我的考試</a>
2.在接收端,我的接收端是js,所以就用js的辦法了,如果是php或者其他語言接收,就再查詢下網上資料吧。不過思路應該不會變,變的是處理的函式應該用php的了。
var kname = request('kname');
kname = decodeURI(kname);

 /**
 * @author gayayang
 * @date 2012-9-18
 * @todo 將url的get引數取出來
 * @param url
 * @returns
 */
function request(paras){
    var url = location.href; 
    var paraString = url.substring(url.indexOf("?")+1,url.length).split("&"); 
    var paraObj = {};
    for (var i=0; j=paraString[i]; i++){ 
    	paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length); 
    } 
    var returnValue = paraObj[paras.toLowerCase()];
    if(typeof(returnValue)=="undefined"){ 
    	return ""; 
    }else{ 
    	return returnValue; 
    }
}

request方法是我寫的取地址中的引數的方法,decodeURI()方法就是將傳遞方故意轉碼的中文又解碼。decodeURI()和encodeURI()兩個方法一邊用一個,但是不能用反了。

但是,上面的方法是不相容IE的,只能是火狐下沒問題,ie就會顯示成:encodeURI(我的考試)。怎麼辦呢?呵呵,給答案吧:

在傳遞端不要用encodeURI()函式,其他地方不變。就這麼簡單。

that is OK!就這麼簡單。