java.net.URI和查询参数值中的百分比

莱万特·洪特瓦里
System.out.println(
    new URI("http", "example.com", "/servlet", "a=x%20y", null));

结果为http://example.com/servlet?a=x%2520y,其中查询参数值与提供的值不同。奇怪,但这确实遵循Javadoc:

“这些构造函数总是引用百分号('%')。”

我们可以传递解码后的字符串,a=x y然后得到一个合理的(?)结果a=x%20y

但是,如果查询参数值包含“&”字符怎么办?例如,如果值是带有查询参数的URL本身,则会发生这种情况。查看以下(错误的)查询字符串:a=b&c必须在此处对&符号进行转义(a=b%26c),否则可以将其视为查询参数a=b和一些垃圾(c)。如果将其传递给URI构造函数,它将对其进行编码,并返回错误的URL:...?a=b%2526c

这个问题似乎使java.util.URI无法使用。我在这里想念什么吗?

答案摘要

java.net.URI确实知道URI的查询部分的存在,但是它不了解查询部分的内部,这对于每种方案而言可能有所不同。例如,java.net.URI无法理解HTTP查询部分的内部结构。如果java.net.URI将查询视为不透明字符串,并且没有更改它,则不会有问题。但它尝试应用一些通用的百分比编码算法,该算法会破坏HTTP URL。

因此,尽管有构造函数,但我无法使用URI类从其各个部分可靠地组装URL。我还要提到,从Java 7开始,相对化操作的实现是非常有限的,仅当一个URL是另一个URL的前缀时才有效。这两个功能(以及用于这些目的的更精简的接口)是我对java.net.URI感兴趣的原因,但是它们都不适合我。

最后,我使用java.net.URL进行了解析,并编写了代码以从各个部分组装一个URL并使两个URL相对化。我还检查了Apache HttpClient URIBuilder类,虽然它确实了解HTTP查询字符串的内部结构,但是从4.3开始,在处理整个查询部分时,它具有与java.net.URI相同的编码问题。

Sotirios Delimanolis

查询字符串

a=b&c

在URI中没有错。关于URI通用语法状态RFC

查询组件是由资源解释的信息字符串

  query         = *uric

在查询组件中,
保留了字符“;”,“ /”,“?”,“:”,“ @”,“&”,“ =“,“ +”,“,”和“ $”。

字符&在查询字符串是非常有效的(uric表示预留的,标记,字母数字字符)。RFC还指出

许多URI包含由某些
特殊字符组成或由其分隔的组件这些字符被称为“保留”,因为
它们在URI组件中的使用仅限于其保留
目的。如果URI组件的数据将与
保留用途冲突,则必须在
形成URI之前转义冲突的数据

由于验证码&有效但已保留,因此由用户决定是否要对其进行编码。

您所谓的查询参数不是URI的功能,因此URI该类没有理由(也不应该)支持它。

有关:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在asp.net中向饼图添加值和百分比

来自分类Dev

使用自己的Java代码和模型获取WEKA中的预测百分比

来自分类Dev

找不到百分比 - JAVA

来自分类Dev

在.NET中执行stream.CopyTo(anotherStream)时如何获得复制百分比?

来自分类Dev

在VB.net中按进度栏的特定百分比进行的事件

来自分类Dev

在.NET中执行stream.CopyTo(anotherStream)时如何获得复制百分比?

来自分类Dev

百分比计算在Java中给了我零

来自分类Dev

从Java迭代器中随机跳过单词的“ X”百分比

来自分类Dev

计算百分比时Java中的奇怪除法错误

来自分类Dev

从Java迭代器中随机跳过单词的“ X”百分比

来自分类Dev

百分比计算在Java中给了我零

来自分类Dev

字符串中字符百分比出现率的错误计算(java)

来自分类Dev

在Java中未定义百分比计算结果

来自分类Dev

如何修复在Java中错误地计算数字百分比的程序?

来自分类Dev

AsyncTask获取Java中进度的百分比

来自分类Dev

带有百分比的java方程

来自分类Dev

从SQL查询和分组中获取百分比

来自分类Dev

计算查询中的百分比

来自分类Dev

MySQL计数值并在一个SQL查询中获取百分比

来自分类Dev

按百分比从ASP.NET集合中选择项目

来自分类Dev

如何使用vb.net比较百分比匹配字符串?

来自分类Dev

ASP.NET表单操作无效的百分比编码

来自分类Dev

Java中的.Net SecureString

来自分类Dev

URI模板中的百分比编码

来自分类Dev

查询滚动总计和百分比

来自分类Dev

如何基于Java 8 Stream过滤器的输出计算百分比

来自分类Dev

Java:如果JOptionPane.showMessageDialog()首先出现,为什么progressBar百分比消失?

来自分类Dev

是否可以使用java DecimalFormat格式化负百分比?

来自分类Dev

比较两个数组并获取匹配的百分比-Java

Related 相关文章

  1. 1

    在asp.net中向饼图添加值和百分比

  2. 2

    使用自己的Java代码和模型获取WEKA中的预测百分比

  3. 3

    找不到百分比 - JAVA

  4. 4

    在.NET中执行stream.CopyTo(anotherStream)时如何获得复制百分比?

  5. 5

    在VB.net中按进度栏的特定百分比进行的事件

  6. 6

    在.NET中执行stream.CopyTo(anotherStream)时如何获得复制百分比?

  7. 7

    百分比计算在Java中给了我零

  8. 8

    从Java迭代器中随机跳过单词的“ X”百分比

  9. 9

    计算百分比时Java中的奇怪除法错误

  10. 10

    从Java迭代器中随机跳过单词的“ X”百分比

  11. 11

    百分比计算在Java中给了我零

  12. 12

    字符串中字符百分比出现率的错误计算(java)

  13. 13

    在Java中未定义百分比计算结果

  14. 14

    如何修复在Java中错误地计算数字百分比的程序?

  15. 15

    AsyncTask获取Java中进度的百分比

  16. 16

    带有百分比的java方程

  17. 17

    从SQL查询和分组中获取百分比

  18. 18

    计算查询中的百分比

  19. 19

    MySQL计数值并在一个SQL查询中获取百分比

  20. 20

    按百分比从ASP.NET集合中选择项目

  21. 21

    如何使用vb.net比较百分比匹配字符串?

  22. 22

    ASP.NET表单操作无效的百分比编码

  23. 23

    Java中的.Net SecureString

  24. 24

    URI模板中的百分比编码

  25. 25

    查询滚动总计和百分比

  26. 26

    如何基于Java 8 Stream过滤器的输出计算百分比

  27. 27

    Java:如果JOptionPane.showMessageDialog()首先出现,为什么progressBar百分比消失?

  28. 28

    是否可以使用java DecimalFormat格式化负百分比?

  29. 29

    比较两个数组并获取匹配的百分比-Java

热门标签

归档