js 解析url中search時存在中文亂碼問題解決方案


一 問題出現原因

當存在這樣一種需求,前端需要通過url中search返回值進行保存使用,但如果search中存在中文解析出來會導致亂碼。這個問題我找了很久原因,最后終於知道解決方案,這里和大家分享一下。

二 解決方案

使用decodeURIComponent() 函數對其存在中文部分解碼操作。

三 認識decodeURIComponent

URI: Uniform ResourceIdentifiers,通用資源標識符
Global對象的encodeURI()和encodeURIComponent()方法可以對URI進行編碼,以便發送給瀏覽器。有效的URI中不能包含某些字符,例如空格。而這URI編碼方法就可以對URI進行編碼,它們用特殊的UTF-8編碼替換所有無效的字 符,從而讓瀏覽器能夠接受和理解。
其中encodeURI()主要用於整個URI(例如,http://www.jxbh.cn/illegal value.htm),而encode-URIComponent()主要用於對URI中的某一段(例如前面URI中的illegal value.htm)進行編碼。它們的主要區別在於,encodeURI()不會對本身屬於URI的特殊字符進行編碼,例如冒號、正斜杠、問號和井字號;而encodeURIComponent()則會對它發現的任何非標准字符進行編碼。來看下面的例子:
var uri="http://www.jxbh.cn/illegal value.htm#start";
//”http: //www.jxbh.cn/illegal value .htm#s tart”
alert(encodeURI (uri)):
//”http% 3A%2F%2Fwww.jxbh.cn%2 Fillegal%2 0value. htm%23 start”
alert( encodaURIComponent (uri));
使用encodeURI()編碼后的結果是除了空格之外的其他字符都原封不動,只有空格被替換成了%20。而encodeURIComponent()方法則會使用對應的編碼替換所有非字母數字字符。這也正是可以對整個URI使用encodeURI(),而只能對附加在現有URI后面的字符串使用encodeURIComponent()的原因所在。一般來說,我們使用encodeURIComponent()方法的時候要比使用encodeURI()更多,因為在實踐中更常見的是對查詢字符串參數而不是對基礎URL進行編碼.
經我的觀測,很多網站的cookie在進行編碼的時候,是encodeURIComponent格式的,所以應該使用decodeURIComponent()進行解碼

四 解析search函數

//獲取url中"?"符后的字串
var getRequest =function() {
  var url = window.location.search;
  var strs = [];
  var theRequest = new Object();
  if (url.indexOf("?") != -1) {
    var str = url.substr(1);
     strs = str.split("&");
    for(var i = 0; i < strs.length; i ++) {
      theRequest[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);
    }
  }
  return theRequest;
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM