我正在尝试发送包含带&符号字符串的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\\
我手动使用网址,所以我只需要正确的字符。
我不能使用任何库。怎么办呢?
答案 0 :(得分:289)
他们需要进行百分比编码:
> encodeURIComponent('&')
"%26"
因此,在您的情况下,URL将如下所示:
http://www.mysite.com?candy_name=M%26M
答案 1 :(得分:34)
这不是仅适用于到网址中的&符号,而是适用于所有reserved characters。其中一些包括:
# $ & + , / : ; = ? @ [ ]
这个想法与在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)
我的推文中有很多保留字符,即?'():/
,所以我编码了status
网址参数的整个值。在使用包含邮件正文或主题的mailto:
个链接时,这也很有用,因为您需要对body
和subject
参数进行编码,以保持换行符,符号等不变。< / p>
当保留集中的字符(“保留字符”)具有时 特定上下文中的特殊含义(“保留目的”)和URI scheme表示有必要将该字符用于其他方面 目的,然后字符必须是百分比编码。百分比编码 保留字符涉及将字符转换为其字符 ASCII中相应的字节值,然后将该值表示为 一对十六进制数字。数字,前面有百分号 然后在URI中使用(“%”)作为转义字符 代替保留字符。 (对于非ASCII字符,它是 通常转换为UTF-8中的字节序列,然后转换为每个字节 value表示如上。)保留字符“/”,用于 例如,如果在URI的“path”组件中使用,则具有特殊功能 作为路径段之间的分隔符的含义。如果,根据a 给定URI方案,“/”需要在路径段中,然后是三个 必须在段中使用字符“%2F”或“%2f”而不是raw “/".
http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters
答案 2 :(得分:6)
尝试使用http://www.example.org?candy_name=M%26M
。
另请参阅this reference以及更多信息on Wikipedia。
答案 3 :(得分:2)
您可以使用%字符来“转义”URL中不允许的字符。见[RFC 1738]。
http://www.asciitable.com/上的ASCII值表。
你可以看到&
是十六进制的26 - 所以你需要M%26M。
答案 4 :(得分: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"
答案 5 :(得分:0)
如果有人想在PHP中使用它,这可能会有所帮助
using UnityEngine;
using System.Collections;
public class Mover : MonoBehaviour {
public float speed;
// Use this for initialization
void Start () {
GetComponent<Rigidbody>().velocity = transform.forward * speed;
}
}
答案 6 :(得分:0)
如果您无法使用任何库对值进行编码, http://www.urlencoder.org/或http://www.urlencode-urldecode.com/或......
只需输入您的价值&#34; M&amp; M&#34;,而不是完整的网址; - )
答案 7 :(得分:0)
您宁愿使用此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