在URL中转义&符号

tom*_*mes 182 url get http query-parameters query-string

我试图发送一个包含带&符号字符串的GET消息,但无法想象如何在URL中转义&符号.

例:

http://www.example.com?candy_name=M&M
result => candy_name = M
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

http://www.example.com?candy_name=M\&M
result => candy_name = M\\
Run Code Online (Sandbox Code Playgroud)

我手动使用URL,所以我只需要正确的字符.

我不能使用任何库.怎么做到呢?

Ble*_*der 312

它们需要进行百分比编码:

> encodeURIComponent('&')
"%26"
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,URL看起来像:

http://www.mysite.com?candy_name=M%26M
Run Code Online (Sandbox Code Playgroud)

  • @Sanjiv:这是你的代码的问题,而不是百分比编码.问一个问题. (3认同)
  • : - %26不适合我.还有其他解决方案.? (2认同)
  • 当我替换&%26时,它仍然显示相同的错误 - "从客户端(&)检测到一个潜在危险的Request.Path值." (2认同)
  • @Sanjiv确保首先将“&”替换为“%26”。参见代码::: NSString * message = @“ Hello Jack&Jill”; message = [message stringByReplacingOccurrencesOfString:@“&” withString:@“%26”]]; message = [message stringByAppendingString:@“”]; message = [message stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; (2认同)

Ale*_*x W 38

不仅适用于URL中的&符号,也适用于所有保留字符.其中一些包括:

 # $ & + ,  / : ; = ? @ [ ]
Run Code Online (Sandbox Code Playgroud)

这个想法与&在HTML文档中编码相同,但除了在HTML文档中之外,上下文已经更改为在URI中.因此,百分比编码可以防止在两个上下文中解析问题.

当你需要将URL放在另一个URL中时,这个方便派对的地方很多.例如,如果您想在Twitter上发布状态:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)
Run Code Online (Sandbox Code Playgroud)

我的推文中有很多保留字符,即?'():/我编码了statusURL参数的整个值.当使用mailto:具有消息正文或主题的链接时,这也很有用,因为您需要编码bodysubject参数以保持换行符,符号等不变.

当保留集中的字符("保留字符")在特定上下文中具有特殊含义("保留目的"),并且URI方案表明有必要将该字符用于其他目的时,则该字符必须进行百分比编码.对保留字符进行编码的百分比涉及将字符转换为ASCII中对应的字节值,然后将该值表示为一对十六进制数字.然后在URI中使用以百分号("%")开头的数字作为转义字符,代替保留字符.(对于非ASCII字符,通常将其转换为UTF-8中的字节序列,然后每个字节值如上所示.)保留字符"/",例如,如果在"path"组件中使用一个URI的特殊含义是路径段之间的分隔符.如果根据给定的URI方案,"/"需要在路径段中,则必须在段中使用三个字符"%2F"或"%2f"而不是原始"/".

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters

  • 在上面的列表中,`!'()*`不是使用`encodeURIComponent`编码的URL. (4认同)

Ant*_*nio 10

我想对Blender 的解决方案添加一点评论。

您可以执行以下操作:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M');
Run Code Online (Sandbox Code Playgroud)

输出:

http://example.com?candy_name=M%26M
Run Code Online (Sandbox Code Playgroud)

这样做的伟大之处在于它不仅适用于&,而且适用于任何特殊角色。

例如:

http://example.com?candy_name=M%26M
Run Code Online (Sandbox Code Playgroud)

输出:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M?><')
Run Code Online (Sandbox Code Playgroud)


gka*_*pak 7

尝试使用http://www.example.org?candy_name=M%26M.

另请参阅此参考资料以及有关维基百科的更多信息.


Pet*_*ull 6

您可以使用 % 字符来“转义”URL 中不允许的字符。请参阅RFC 1738

维基百科页面上给出了 ASCII 值表。

您可以看到&十六进制为 26 - 所以您需要 M%26M。