如何确定URI是否被转义?

时间:2014-01-08 21:42:37

标签: uri apache-commons-httpclient

我正在使用apache commons HTTPClient来下载网络资源。这些资源的URI来自第三方,我不会生成它们。

公共httpclient需要将一个URI对象赋予GetMethod对象。

URI构造函数接受一个字符串(对于uri)和一个布尔值,指定它是否被转义。

目前,我正在执行以下操作以确定我获得的原始网址是否已经转义...

    boolean isEscaped = URIUtil.getPathQuery(originalUrl).contains("%");

    m.setURI(new URI(originalUrl, isEscaped));

这是确定uri是否已经转义的正确方法吗?

...更新

根据维基百科(嗯,根据维基百科(http://en.wikipedia.org/wiki/Percent-encoding),它说百分比是一个保留字符,应该始终编码...我在这里逐字引用...

  

百分比编码百分比字符[edit]因为百分比(“%”)   字符作为百分比编码八位字节的指示符,它必须   被百分比编码为“%25”,该八位字节用作a中的数据   URI。

这是否意味着您永远不会在有效的uri中拥有裸体'%'字符?

此外,uri(s)来自各种来源,所以我无法确定它们是否被转义或未转义。

1 个答案:

答案 0 :(得分:1)

这不起作用。未编码的字符串可能已经包含%

例如:
https://www.google.com/#q=like%25&safe=off
是Google搜索like%的网址。在未转义的形式中,它将是https://www.google.com/#q=like%&safe=off

如果URI被转义,您的消费者应该通知您。