gpt4 book ai didi

javascript - 如何知道 URL 是否已解码/编码?

转载 作者:行者123 更新时间:2023-12-03 03:06:38 25 4
gpt4 key购买 nike

我正在使用 Javascript 方法 decodeURIComponent 来解码编码的 URL。现在我遇到一个问题,有时 URL 在服务器之间重定向期间会被编码两次,有时只被编码一次。

我想检查调用方法 decodeURIComponent 后 URL 是否仍然经过编码。我怎样才能做到这一点?任何指针都会对我非常有帮助。

更新 - 1

如果我递归调用一个方法并检查给定的 URL 是否仍然包含“%”,如果包含“%”则对其进行解码并再次调用该方法;如果不将其返回给调用者,这会起作用吗?

更新 - 2

就我而言,我有:

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

现在我在 js 方法中获取 callBackUrl 的值,然后对其进行解码并使用解码后的 URL 触发 window.open() 。参数相同,并且具有:

  • adf.tfDoc
  • adf.tfId
  • 文章引用
  • 上一个 View
  • 来自UCM
  • 文章类型
  • 开发人员

参数传入其中。所以我知道没有像 value="%.." 这样的查询字符串。

更新 - 3

我写了以下方法:

var decodeURLRecursively = function(url) {
if(url.indexOf('%') != -1) {
return decodeURLRecursively(decodeURIComponent(url));
}

return url;
}

最佳答案

有一种简单的方法可以知道 URL 字符串是否经过编码。

获取初始字符串并将其与解码结果进行比较。如果结果相同,则不对字符串进行编码;如果结果不同,则对其进行编码。

我的网址遇到了这个问题,我使用了这个函数:

function isEncoded(uri) {
uri = uri || '';

return uri !== decodeURIComponent(uri);
}

现在我可以使用 isEncoded 作为 while 循环(或递归)中的判别式来了解是否需要继续在字符串上调用 decodeURIComponent:

function fullyDecodeURI(uri){

while (isEncoded(uri)){
uri = decodeURIComponent(uri);
}

return uri;
}

这解决了我对多次编码的网址进行解码的问题。希望这会有所帮助。

关于javascript - 如何知道 URL 是否已解码/编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com