【问题标题】:How to determine if a URI is escaped?如何确定 URI 是否被转义?
【发布时间】:2014-01-27 05:37:36
【问题描述】:

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

commons 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),它说百分比是一个保留字符,应该始终被编码......我在这里逐字引用......

对百分比字符进行百分比编码[编辑] 因为百分比 ("%") 字符用作百分比编码八位字节的指示符,它必须 被百分比编码为“%25”,以便将该八位字节用作 URI。

这是否意味着您永远不能在有效的 uri 中使用裸 '%' 字符?

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

【问题讨论】:

    标签: uri apache-commons-httpclient


    【解决方案1】:

    这行不通。未编码的字符串中可能已经有%

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

    您的消费者应该让您知道 URI 是否被转义。

    【讨论】:

    • It's possible the un-encoded string has a % in it already. 那么你不能只使用正则表达式或其他东西来确定% 是用于编码还是文字字符串?
    • 否,因为如果用户合法地查找 %25 怎么办?你不能仅仅假设%25 是一个编码的% 它可能是它自己的字符串。
    • 嗯,根据维基百科 (en.wikipedia.org/wiki/Percent-encoding),它说百分比是一个保留字符,应该始终被编码......
    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 2015-02-27
    • 1970-01-01
    • 2023-03-27
    • 2010-09-24
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多