在Android上解析查询字符串

发布于 2021-02-02 22:57:32

Java EE具有ServletRequest.getParameterValues()。

在非EE平台上,URL.getQuery()仅返回一个字符串。

当不在 Java EE上时,正常解析URL中的查询字符串的正常方法是什么?

< rant >

尝试创建自己的解析器的答案很流行。这是一个非常有趣且令人兴奋的微编码项目,但我不能说这是一个好主意 :(

以下代码片段通常有缺陷或损坏,顺便说一句。打破它们对于读者来说是一个有趣的练习。 并向黑客攻击使用它们的网站。

解析查询字符串是一个定义明确的问题,但阅读规范和理解细微差别并非易事。最好让一些平台库编码器为您完成工作,并进行修复!

< / rant >

关注者
0
被浏览
346
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    由于Android M,事情变得更加复杂。android.net.URI .getQueryParameter()的答案有一个错误,该错误在JellyBean之前打乱了空格。 阿帕奇URLEncodedUtils.parse()工作,但以L弃用,并以M删除。

    因此,最好的答案是UrlQuerySanitizer。自API级别1起就存在,并且仍然存在。它还使你考虑棘手的问题,例如如何处理特殊字符或重复值。

    最简单的代码是

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看