1 回答

TA貢獻1851條經驗 獲得超3個贊
您的某些字符串filterDecode作為正則表達式具有特殊含義。將字符串轉換為正則表達式時,需要將每個字符都包裹起來,[]以便按字面意思進行匹配。
/創建regexDe. _
不需要for(b...)循環。在調用中使用正則表達式,replace()它將立即執行所有替換,因為它有g標志。
將包含的編碼字符串放在%數組的開頭。否則,當您對類似=as的內容進行編碼時%3D,外循環的后續迭代會將其重新編碼為%253D。如果它在原始字符串中,而不是中間步驟,您只想對其進行編碼。
var Url = {
filterDecode: ["%252F", "%253A", "%253D", "%253F", "%252B", "%2B", "%3A", "%3D", "%3F", "%2F", "%26"],
filterEncode: ["%2F", "%3A", "%3D", "%3F", "%2B", "+", ":", "=", "?", "/", "&"],
strToRe: function(str) {
let reStr = str.split("").map(c => '[' + c + ']').join('');
return new RegExp(reStr, "g");
},
decode: function(decodeText) {
let a;
let filterEncode = Url.filterEncode;
let filterDecode = Url.filterDecode;
for (a = 0; a < filterDecode.length; a++) {
decodeText = decodeText.replace(Url.strToRe(filterDecode[a]), filterEncode[a]);
}
return decodeText;
},
encode: function(encodeText) {
let a, b;
let filterEncode = Url.filterEncode;
let filterDecode = Url.filterDecode;
for (a = 0; a < filterEncode.length; a++) {
encodeText = encodeText.replace(Url.strToRe(filterEncode[a]), filterDecode[a]);
}
return encodeText;
}
}
console.log(Url.encode("="));
console.log(Url.decode("%3D"));
console.log(Url.encode("%3F"));
console.log(Url.decode("%253F"));
console.log(Url.encode("%3F ="));
console.log(Url.decode("%253F %3D"));
添加回答
舉報