java url 非法字符串_java-如何找出字符串是否已被URL编码?
java-如何找出字符串是否已被URL编码?
如何检查字符串是否已经编码?
例如,如果我对TEST==进行编码,则得到TEST%3D%3D。如果我对最后一个字符串再次进行编码,则得到TEST%253D%253D,在这样做之前,我必须知道它是否已经被编码。
我已经保存了编码参数,我需要搜索它们。 我不知道输入参数是什么,是编码还是不编码,所以我必须知道在搜索之前是否必须对它们进行编码或解码。
9个解决方案
40 votes
解码,与原始图像进行比较。 如果确实不同,则对原稿进行编码。 如果没有区别,则原始文件不会被编码。 但是对于新解码的版本是否仍未编码,它仍然没有说什么。 递归的好任务。
我希望不能用urlencode编写quine,否则此算法会卡住。
SF. answered 2020-06-24T14:45:00Z
15 votes
使用regex检查您的字符串是否包含非法字符(即,在URL编码的字符串中找不到的字符,例如空格)。
Roman answered 2020-06-24T14:45:20Z
4 votes
关于软件的Joel有时会为此提供解决方案-[http://www.joelonsoftware.com/articles/Wrong.html]
或者,您可以在字符串中添加一些前缀。
Padmarag answered 2020-06-24T14:45:44Z
3 votes
尝试解码网址。 如果结果字符串比原始字符串短,则说明原始URL已经被编码,否则您可以安全地对其进行编码(要么不进行编码,要么对URL进行后期编码,否则保持不变,因此再次编码不会导致错误的URL )。 以下是示例伪代码(受ruby启发):
# Returns encoded URL for any given URL after determining whether it is already encoded or not
def escape(url)
unescaped_url = URI.unescape(url)
if (unescaped_url.length < url.length)
return url
else
return URI.escape(url)
end
end
amit_saxena answered 2020-06-24T14:46:05Z
2 votes
您无法确定,除非您的字符串符合特定模式,否则您将跟踪字符串。 正如您自己所指出的那样,也可以对已编码的字符串进行编码,因此无法通过查看字符串本身来确保自己100%地确定。
flybywire answered 2020-06-24T14:46:25Z
0 votes
检查您的URL中是否包含可疑字符[1]。候选人名单:
WHITE_SPACE ,", < , > , { , } , | , \ , ^ , ~ , [ , ] , .和`
我用:
private static boolean isAlreadyEncoded(String passedUrl) {
boolean isEncoded = true;
if (passedUrl.matches(".*[\\ \"\\\\{\\}|\\\\^~\\[\\]].*")) {
isEncoded = false;
}
return isEncoded;
}
对于实际的编码,我继续:
[HTTPS://stack overflow.com/啊/49796882/1485527]
注意:即使您的网址不包含不安全的字符,您可能仍要应用,例如 Punnycode编码为主机名。 因此,仍有大量空间可以进行其他检查。
[1]可在第2页的URL规范的“不安全”部分中找到候选列表。根据我的理解,在编码检查中应省略“%”或“#”,因为这些字符也可能出现在编码的URL中。
jschnasse answered 2020-06-24T14:47:12Z
0 votes
如果要确保正确编码了字符串(如果需要编码),则只需再次解码并编码即可。
元代码:
100%_correctly_encoded_string = encode(decode(input_string))
已经编码的字符串将保持不变。 未编码的字符串将被编码。 仅包含url允许的字符的字符串也将保持不变。
esergion answered 2020-06-24T14:47:41Z
0 votes
根据规范([https://tools.ietf.org/html/rfc3986)],所有URL都必须以以下方案开头:
由于必须使用冒号作为方案与URI其余部分之间的分隔符,因此不会对任何包含冒号的字符串进行编码。
(这假设您将获得没有方案的不完整URI。)
因此,您可以测试字符串是否包含冒号,如果没有,则对其进行urldecode,如果该字符串包含冒号,则对原始字符串进行url编码,如果不是,请检查字符串是否不同,如果不同,则再次进行urldecode,否则 ,它不是有效的URI。
如果您知道可以期望的方案,则可以使此循环更简单。
Luke Mlsna answered 2020-06-24T14:48:20Z
0 votes
感谢这个答案,我编码了一个函数(JS语言),使用2937227746927444944992仅对URL进行了一次编码,因此您可以调用该函数以确保仅对它进行一次编码,而无需知道URL是否已被编码。
ES6:
var getUrlEncoded = sURL => {
if (decodeURI(sURL) === sURL) return encodeURI(sURL)
return getUrlEncoded(decodeURI(sURL))
}
对于ES6:
var getUrlEncoded = function(sURL) {
if (decodeURI(sURL) === sURL) return encodeURI(sURL)
return getUrlEncoded(decodeURI(sURL))
}
这是一些测试,因此您可以看到URL仅被编码一次:
getUrlEncoded("https://example.com/media/Screenshot27 UI Home.jpg")
//"https://example.com/media/Screenshot27%20UI%20Home.jpg"
getUrlEncoded(encodeURI("https://example.com/media/Screenshot27 UI Home.jpg"))
//"https://example.com/media/Screenshot27%20UI%20Home.jpg"
getUrlEncoded(encodeURI(encodeURI("https://example.com/media/Screenshot27 UI Home.jpg")))
//"https://example.com/media/Screenshot27%20UI%20Home.jpg"
getUrlEncoded(decodeURI("https://example.com/media/Screenshot27 UI Home.jpg"))
//"https://example.com/media/Screenshot27%20UI%20Home.jpg"
getUrlEncoded(decodeURI(decodeURI("https://example.com/media/Screenshot27 UI Home.jpg")))
//"https://example.com/media/Screenshot27%20UI%20Home.jpg"
Alberto answered 2020-06-24T14:48:54Z
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)