在网址中转义“&”号


203

我正在尝试发送GET消息,该消息包含带有&符号的字符串,并且无法弄清楚如何在URL中转义&符号。

例:

http://www.example.com?candy_name=M&M
result => candy_name = M

我也尝试过:

http://www.example.com?candy_name=M\&M
result => candy_name = M\\

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

我不能使用任何库。如何做呢?

Answers:


350

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

> encodeURIComponent('&')
"%26"

因此,在您的情况下,URL如下所示:

http://www.mysite.com?candy_name=M%26M

2
:-%26对我不起作用。还有其他解决方案吗?
桑吉夫

2
当我将&替换为%26时,它仍显示相同的错误A potentially dangerous Request.Path value was detected from the client (&).
Sanjiv

4
@Sanjiv:这是您的代码的问题,而不是百分比编码。问一个问题。
Blender

2
@Sanjiv确保首先将“&”替换为“%26”。参见代码::: NSString * message = @“ Hello Jack&Jill”; message = [message stringByReplacingOccurrencesOfString:@“&” withString:@“%26”]]; message = [message stringByAppendingString:@“”]; 消息= [消息stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
尼拉夫

40

不仅适用于URL中的&符号,而且还适用于所有保留字符。其中一些包括:

 # $ & + ,  / : ; = ? @ [ ]

这个想法与&在HTML文档中编码相同,但是上下文已更改为在URI内,除了在HTML文档内。因此,百分比编码可防止在两个上下文中进行解析时出现问题。

当您需要将一个URL放在另一个URL内时,这很有用。例如,如果您想在Twitter上发布状态:

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

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

如果保留集中的字符(“保留字符”)在特定上下文中具有特殊含义(“保留目的”),并且URI方案指出有必要将该字符用于其他目的,则该字符必须为百分比编码。对保留字符进行百分比编码涉及将字符转换为其相应的ASCII字节值,然后将该值表示为一对十六进制数字。然后在URI中使用这些数字后跟用作转义字符的百分号(“%”),代替保留字符。(对于非ASCII字符,通常会在UTF-8中将其转换为字节序列,然后按上述方式表示每个字节的值。)保留字符“ /”,例如,如果在“路径”中使用 URI的特殊组成部分,其特殊含义是成为路径段之间的分隔符。如果根据给定的URI方案,“ /”必须位于路径段中,则必须在该段中使用三个字符“%2F”或“%2f”,而不是原始的“ /”。

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


4
在上面的列表中,! ' ( ) *没有使用进行URL编码encodeURIComponent
Amil Waduwawara 2014年

有一个php函数urlencode可以解决此问题:用法$ escapedfilename = urlencode($ filename);
杰里米·杨





1

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

您可以执行以下操作:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M');

输出:

http://example.com?candy_name=M%26M

伟大的事情不仅仅适用于&,而且适用于任何特殊字符。

例如:

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

输出:

"http://example.com?candy_name=M%26M%3F%3E%3C"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.