Java 如何替换特定的'&';在URL字符串中进行解析

Java 如何替换特定的'&';在URL字符串中进行解析,java,parsing,url,ampersand,Java,Parsing,Url,Ampersand,URL字符串可以是非常动态的。 它可以有任意数量和参数组合。 例如: myHost?parm1=Data1&parm2=Data2&parm3=Data3 myHost?parm1=Data1&1b&parm2=Data2&2b&parm3=Data3&3b 在这种情况下,大多数解析例程都可以很好地实现,但是如果数据本身包含一个“&”呢。 例如: myHost?parm1=Data1&parm2=Data2&

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

  myHost?parm1=Data1&parm2=Data2&parm3=Data3
  myHost?parm1=Data1&1b&parm2=Data2&2b&parm3=Data3&3b
在这种情况下,大多数解析例程都可以很好地实现,但是如果数据本身包含一个“&”呢。 例如:

  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建议?

&
都应该进行百分比编码,如
%26
。在您的示例中,它们应该如下所示:

parm1=Data1%261b
parm2=Data2%262b
parm3=Data3%263b
因此,只需通过
&
,就可以轻松拆分正确编码的URL


创建URL时,客户端程序必须对每个参数值进行URL编码。然后通过
=
连接键和(编码的)值来格式化URL,并通过
&
连接键值对列表。如果客户端程序没有对参数值进行URL编码,那么服务器程序将无法将嵌入的
&
与查询字符串中的值分隔符
&
&
区分开来,因为
%26
。在您的示例中,它们应该如下所示:

parm1=Data1%261b
parm2=Data2%262b
parm3=Data3%263b
因此,只需通过
&
,就可以轻松拆分正确编码的URL


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

在Java中有一个为您编码URL的实用程序(Java.net.URLEncoder),它应该负责替换符号。
与你的帖子相似


此外,您还可以阅读一些关于url编码的建议。

Java中有一个为您编码url的实用程序(Java.net.URLEncoder),它应该注意替换符号。
与你的帖子相似


而且,您可以阅读一些关于url编码的建议。

这是否意味着当数据包含“&”时,用户需要自己输入%26,然后在url的其他位置使用“&”?客户机程序负责正确编码
&
我所看到的基本上是“全部”还是“无”编码的类型,当编码完成时,仍然无法区分数据中的“&”和分隔数据的“&”。创建URL时,客户端程序必须对每个参数值进行URL编码。然后通过
=
连接键和(编码的)值来格式化URL,并通过
&
连接键值对列表。如果客户端程序没有对参数值进行URL编码,那么服务器程序将无法将嵌入的
&
与值分隔符
&
区分开来。可能有1000个不同的参数。根据回复,您是否指示客户端应用程序跟踪所有1000多个参数,提取名称-值对,然后进行编码?这是否意味着当数据包含“&”,但在URL的其他位置使用“&”时,预期用户自己输入%26?客户机程序负责对
&
进行适当编码。我看到的是,all基本上执行全有或全无类型的编码,并且在这种情况下完成后,仍然无法区分数据中的“&”和分隔数据的“&”。创建URL时,客户端程序必须对每个参数值进行URL编码。然后通过
=
连接键和(编码的)值来格式化URL,并通过
&
连接键值对列表。如果客户端程序没有对参数值进行URL编码,那么服务器程序将无法将嵌入的
&
与值分隔符
&
区分开来。可能有1000个不同的参数。根据回复,您是否指示客户端应用程序跟踪所有1000多个参数,提取名称-值对,然后进行编码?我看到了这个示例,除非我遗漏了将处理所有“&”符号而不仅仅是与数据关联的符号的内容。我看到了这个示例,除非我遗漏了将处理所有“&”符号而不仅仅是与数据关联的符号的内容。