Tap*_*ose 21 javascript urlencode urldecode
我使用Javascript方法decodeURIComponent解码编码的URL.现在我遇到了一个问题,有时在服务器之间重定向期间URL被编码两次,有时它只被编码一次.
我想检查一下,如果在调用方法后URL仍然是编码的decodeURIComponent.我怎样才能做到这一点?任何指针都对我很有帮助.
如果我递归调用一个方法并检查给定的URL是否仍然包含"%",如果它包含"%",则解码它并再次调用该方法; 如果没有将它返回给调用者,那会有效吗?
对于我的情况,我有:
callBackUrl=http%253A%252F%252Fadbc.com%252FPOSM%252Fapp%252Fpages%252Fadf.task-flow%253Fadf.tfDoc%253D%25252FWEB-INF%25252Ftask-flows%25252Fcatalog-edit-task-flow.xml%2526adf.tfId%253Dcatalog%2526_adf.ctrl-state%253Db9akorh22_9%2526articleReference%253D10C00135%2526previousView%253Dcatalog-home%2526fromUCM%253Dtrue%2526articleType%253Dposm%2526developer%253Dcentral
Run Code Online (Sandbox Code Playgroud)
现在我在我的js方法中获取callBackUrl的值,然后解码它并window.open()使用该解码的URL 触发.参数相同,它有:
参数进入它.所以我知道没有类似的查询字符串value="%..".
我写了以下方法:
var decodeURLRecursively = function(url) {
if(url.indexOf('%') != -1) {
return decodeURLRecursively(decodeURIComponent(url));
}
return url;
}
Run Code Online (Sandbox Code Playgroud)
rod*_*odu 30
如果URL字符串被编码,有一种简单的方法可以解决.
获取初始字符串并将其与解码结果进行比较.如果结果相同,则不对字符串进行编码; 如果结果不同则编码.
我的网址遇到了这个问题,我使用了这个函数:
function isEncoded(uri) {
uri = uri || '';
return uri !== decodeURIComponent(uri);
}
Run Code Online (Sandbox Code Playgroud)
所以现在我可以isEncoded在while循环(或递归)中使用判别式来知道我是否需要继续调用decodeURIComponent字符串:
function fullyDecodeURI(uri){
while (isEncoded(uri)){
uri = decodeURIComponent(uri);
}
return uri;
}
Run Code Online (Sandbox Code Playgroud)
这解决了我解码多次编码网址的问题.希望这可以帮助.
Nie*_*sol 11
重复解码直到找不到任何%迹象将在99%的时间内起作用.只要/%[0-9a-f]{2}/i找到匹配就可以反复拨打电话,效果会更好.
但是,如果我(由于一些奇怪的原因)命名文件100%achieved,这将导致问题因为%ac将被解码¬,导致解码失败.不幸的是,没有办法检测到这种情况.
理想情况下,您应该知道某些事物是否被编码不止一次,并且最好不要让它首先发生.