【问题标题】:How to replace specific '&' within a URL string for parsing如何替换 URL 字符串中的特定 '&' 以进行解析
【发布时间】:2015-12-16 20:48:50
【问题描述】:

URL 字符串可以是非常动态的。 它可以有任意数量和任意组合的参数。 例如:

  myHost?parm1=Data1&parm2=Data2&parm3=Data3

在这种情况下,大多数解析例程都可以很好地实现,但是如果数据本身包含“&”怎么办。 例如:

  myHost?parm1=Data1&1b&parm2=Data2&2b&parm3=Data3&3b

使用 StringTokenizer 或 URLEncoder 是一个全有或全无的过程。 由于参数名称可能不同,因此它们不能用作搜索的一部分。 名称值对需要分解,包含“&”的数据需要保持原样:

parm1=Data1&1b
parm2=Data2&2b
parm3=Data3&3b

对于实现这一点的任何 Java 建议?

【问题讨论】:

    标签: java parsing url ampersand


    【解决方案1】:

    & 查询字符串值应该是百分比编码,如%26。在您的示例中,它们应如下所示:

    parm1=Data1%261b
    parm2=Data2%262b
    parm3=Data3%263b
    

    所以应该很容易拆分正确编码的 URL,只需 &

    创建 URL 时,客户端程序必须对每个参数值进行 URL 编码。然后通过= 连接键和(编码)值来格式化URL,& 连接键值对列表。如果客户端程序不对参数值进行 URL 编码,那么服务器程序将无法区分嵌入的 & 和值分隔符 &

    【讨论】:

    • 这是否意味着当数据包含'&'但随后在URL的其他位置使用'&'时,用户需要自己输入%26?
    • 正确编码&是客户端程序的责任
    • 我所看到的基本上都是全有或全无类型的编码,完成后您仍然无法区分数据中的“&”和分隔数据的“&”。
    • 创建 URL 时,客户端程序必须对每个参数值进行 URL 编码。然后通过= 连接键和(编码)值来格式化 URL,& 连接键值对列表。如果客户端程序不对参数值进行 URL 编码,那么服务器程序将无法区分嵌入的 & 和值分隔符 &
    • 可能有 1000 个不同的参数。根据回复,您是否表明客户端应用程序跟踪所有 1,000 多个参数,提取名称值对然后编码?
    【解决方案2】:

    Java 中有一个实用程序可以为您编码 url (java.net.URLEncoder),它应该负责替换 & 符号。
    Here 与您的帖子类似。

    此外,您还可以阅读一些articles,它提供了一些有关 url 编码的建议。

    【讨论】:

    • 我看到了那个例子,除非我错过了一些可以处理所有“&”符号的东西,而不仅仅是与数据相关的那些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多