示例:
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
#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:
链接时,这也很有用,因为您需要对body
和subject
参数进行编码,以使换行符,“&”号等保持完整。保留集中的字符(“保留字符”)在特定上下文中具有特殊含义(“保留目的”),并且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¶m2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org / en-US / docs / Web / JavaScript / Reference / Global_Objects / encodeURIComponent
评论
:-%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