encodeURI和encodeURIComponet函數都是javascript中用來對URI進行編碼,將相關參數轉換成UTF-8編碼格式的數據。URI在進行定位跳轉時,參數里面的中文、日文等非ASCII編碼都會進行編碼轉換。
例如:
var str1 = "http://www.baidu.com/s?wd=中國&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=2526";window.location.href=str1;
上面的uri里面包含中文,瀏覽器解析時無法識別,不能直接跳轉。需要進行轉碼!
1、encodeURI:該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。URI 中具有特殊含義的 ASCII 標點符號,如:;/?:@&=+$,# 也不會進行轉碼。
前面的例子,采用encodeURI轉碼方式如下:
var str1 = encodeURI("http://www.baidu.com/s?wd=中國&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=2526");window.location.href=str1;
轉碼后的內容如下:
http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=2526
2、encodeURIComponet:該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。其他它字符(包括 :;/?:@&=+$,# 這些用于分隔 URI 組件的標點符號)都會進行轉碼。
前面的例子,采用encodeURIComponet轉碼方式如下:
var str1 = "http://www.baidu.com/s?wd="+encodeURIComponent("中國")+"&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=2526";window.location.href=str1;
轉換后的內容如下:
http://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=2526
如果使用encodeURIComponet進行整體轉碼。由于將&等字符也將被轉換,導致瀏覽器無法解析跳轉失敗。
var str1 = encodeURIComponent("http://www.baidu.com/s?wd=中國&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&inputT=2526");window.location.href=str1;
http%3A%2F%2Fwww.baidu.com%2Fs%3Fwd%3D%E4%B8%AD%E5%9B%BD%26rsv_spt%3D1%26issp%3D1%26rsv_bp%3D0%26ie%3Dutf-8%26tn%3Dbaiduhome_pg%26inputT%3D2526
總結:(1)encodeURI的目的是對 URI 進行整體編碼,故適用于url跳轉時使用;(2)encodeURIComponent會把部分uri關鍵字符(如:&等)也進行轉換,故適用于傳遞參數時使用。
新聞熱點
疑難解答