【发布时间】:2020-11-26 05:33:30
【问题描述】:
我正在开发一个 Url 解码和编码系统。但出于某种奇怪的原因,它只会解码/编码某些字符串。此外,当字符串中有某个片段时,它似乎会解码/编码一个字符串。这很难解释,但是对于这可能不起作用的情况却很困惑。我试图找出它的问题,但它只是让整个问题看起来比逻辑更不合逻辑。
我希望有人可以帮助我解决这个问题。与它的解释。如果代码的样式也与它相同,我希望它。
我也知道网上可能有一些软件包可以轻松做到这一点,但我宁愿自己制作。这是我可以更多练习JS的一种方式。
// I know I don't have all the characters markek. I am doing that later
var Url = {
filterEncode : ["%2B","%3A","%3D","%3F","%2F","%26","%252F","%253A","%253D","%253F","%252B"],
filterDecode : ["+",":","=","?","/","&","%2F","%3A","%3D","%3F","%2B"],
decode : function(decodeText){
let returnString, a, b;
let filterEncode = Url.filterEncode;
let filterDecode = Url.filterDecode;
for (a = 0; a < filterEncode.length; a++){
let regexEn = new RegExp(filterEncode[a],"g");
let regexDe = new RegExp("/" + filterDecode[a],"g");
let regex = new RegExp(regexEn,"g");
let array = (decodeText.match(regex) || []).length
for (b = 0; b < array; b++){
returnString = decodeText.replace(filterEncode[a],filterDecode[a]);
decodeText = returnString;
}
}
return returnString;
},
encode : function(encodeText){
let returnString, a, b;
let filterEncode = Url.filterEncode;
let filterDecode = Url.filterDecode;
for (a = 0; a < filterEncode.length; a++){
let regexEn = new RegExp("[" + filterEncode[2] + "]","g");
let regexDe = new RegExp("[" + filterDecode[2] + "]","g");
let regex = new RegExp(regexEn,"g");
let array = (encodeText.match(regex) || []).length;
for (b = 0; b < array; b++){
returnString = encodeText.replace(filterDecode[a],filterEncode[a]);
encodeText = returnString;
}
}
return returnString;
}
}
// Saying it is undefined
console.log(Url.encode("="));
// Encodes it just find
console.log(Url.encode("%3F"));
// Encodes both of them but for some odd reason encodes the
// equal sign twice.
console.log(Url.encode("%3F ="));
我确实希望一切都清楚我的问题是什么。我通常会尝试在这里搜索答案,但是这个问题太混乱了,我不知道我到底应该搜索什么。
谢谢!
【问题讨论】:
-
在创建
filterDecode的时候为什么要连接/? -
我更多地使用了 Encode 属性,并且正在找出问题所在。这就是为什么,它并没有改变任何东西,因为我已经测试过了。
标签: javascript regex algorithm url