需求及解決
兩個頁面傳值的需求是很常見的,angular中有很多常見的方法用於傳值,而且都不會受到字符編碼的影響,而采用傳統的url中拼字符串進行傳值的操作,如果拼串中涉及到中文字符,我們就要考慮頁面的編碼問題了。
如如下的地址
http://www.xxx.com/ddd?type=10&gn=你好
經過url編碼轉變為
http://www.xxx.com/ddd?type=10&gn=%E5%81
從而導致如果直接獲取這個值會出現異常顯示
通常我們要解決兩個問題:
- 將search部分可能存在編碼的字符串從地址中提取出來,如需要處理編碼的其實就只是gn這個參數
- 判斷該字符串是否進行了編碼,並對其進行操作
網上有很多方法,使用起來效率不高而且還報錯,我這里總結了一個可用的,代碼如下:
//傳入可能出現編碼的key值,返回相應的value
function GetQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
var r = window.location.search.substr(1).match(reg);
if(r != null) return(r[2]);
return null;
}
//測試用的數據
var gn = GetQueryString("gn");
//判斷gn是否編碼,如果編碼了就進行解碼
if(!(gn.indexOf( "%" )<0)) {
gn = decodeURI(gn);
}
核心原理是使用正則匹配,然后判斷字符串是否以%開頭,所以這種方法只適用於url編碼的問題,其他編碼大家自行修改就成。