Java EE具有ServletRequest.getParameterValues()。
在非EE平台上,URL.getQuery()仅返回一个字符串。
当不在 Java EE上时,正常解析URL中的查询字符串的正常方法是什么?
< rant >
尝试创建自己的解析器的答案很流行。这是一个非常有趣且令人兴奋的微编码项目,但我不能说这是一个好主意 :(
以下代码片段通常有缺陷或损坏,顺便说一句。打破它们对于读者来说是一个有趣的练习。 并向黑客攻击使用它们的网站。
解析查询字符串是一个定义明确的问题,但阅读规范和理解细微差别并非易事。最好让一些平台库编码器为您完成工作,并进行修复!
< / rant >
由于Android M,事情变得更加复杂。android.net.URI .getQueryParameter()的答案有一个错误,该错误在JellyBean之前打乱了空格。 阿帕奇URLEncodedUtils.parse()工作,但以L弃用,并以M删除。
Android M
android.net.URI .getQueryParameter()
JellyBean
URLEncodedUtils.parse()
M
因此,最好的答案是UrlQuerySanitizer。自API级别1起就存在,并且仍然存在。它还使你考虑棘手的问题,例如如何处理特殊字符或重复值。
UrlQuerySanitizer
最简单的代码是
UrlQuerySanitizer.ValueSanitizer sanitizer = UrlQuerySanitizer.getAllButNullLegal(); // remember to decide if you want the first or last parameter with the same name // If you want the first call setPreferFirstRepeatedParameter(true); sanitizer.parseUrl(url); String value = sanitizer.getValue("paramname"); // get your value