我正在尝试发送包含带有&符号的字符串的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,因此我只需要正确的字符即可。

我可以不要使用任何库。怎么做?

#1 楼

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

> encodeURIComponent('&')
"%26"


因此,在您的情况下,URL看起来像:

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


评论


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

– Sanjiv
16年8月23日在6:12

当我将&替换为%26时,它仍显示相同的错误-从客户端(&)检测到潜在的危险Request.Path值。

– Sanjiv
16年8月23日在6:14

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

– Blender
16年8月23日在6:19

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

– Nirav
17 Mar 31 '13:35



#2 楼

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

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


这个想法与在HTML文档中编码&相同,但是除了上下文外,上下文也已更改为URI在HTML文档中。因此,百分比编码可防止在两个上下文中进行解析时出现问题。例如,如果您想在Twitter上发布状态:

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


我的推文中有很多保留字符,即?'():/,因此我编码了status URL参数。当使用带有消息正文或主题的mailto:链接时,这也很有用,因为您需要对bodysubject参数进行编码,以使换行符,“&”号等保持完整。保留集中的字符(“保留字符”)在特定上下文中具有特殊含义(“保留目的”),并且URI
方案规定,必须将该字符用于其他
目的,则必须对字符进行百分比编码。百分比编码
保留字符包括将字符转换为ASCII中相应的
字节值,然后将该值表示为一对一对十六进制数字。这些数字后跟用作转义字符的百分号
(“%”),然后在URI
中代替保留字符。 (对于非ASCII字符,通常将其
转换为UTF-8中的字节序列,然后每个byte
值如上所示。)保留字符“ /”,用于
示例,如果用在URI的“路径”组件中,则具有特殊的
含义,它是路径段之间的分隔符。根据给定的URI方案,如果“ /”必须位于路径段中,则三个
段中必须使用字符“%2F”或“%2f”,而不是原始的
“ /”。


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

评论


在以上列表中,! '()*不是使用encodeURIComponent进行URL编码的。

–阿米尔·瓦杜瓦瓦拉(Amil Waduwawara)
2014-10-24 5:54



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

–杰里米·杨(Jeremy Young)
19年2月19日在13:28

#3 楼

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

另请参阅本参考资料和有关Wikipedia的更多信息。

#4 楼

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

http://www.asciitable.com/上的ASCII值表。

您可以看到&是十六进制的26-因此您需要M%26M。

#5 楼

我想对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"


#6 楼

如果有人在PHP中想要它,这可能会有所帮助

$variable ="candy_name=M&M";
$variable = str_replace("&", "%26", $variable);


#7 楼

如果您无法使用任何库对值进行编码,请
http://www.urlencoder.org/或http://www.urlencode-urldecode.com/或...

只需输入您的值“ M&M”,而不是完整的URL ;-)

#8 楼

您宁可使用此encodeURIComponent函数传递参数,因此不必担心传递任何特殊字符。

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos&param2="+encodeURIComponent(someValue)


https://developer.mozilla.org / en-US / docs / Web / JavaScript / Reference / Global_Objects / encodeURIComponent