jQuery.ajax()
在转义数据时做一些奇怪的事情。
例如,如果我发送请求:
$.ajax({
url: 'somethinguninteresting',
data: {
name: 'Ihave¬aweirdcharacter';
}
});
然后在Chrome devtools中研究XHR,它将“请求有效载荷”显示为 name=Ihave%C2%ACaweirdcharacter
现在,我发现:
'¬'.charCodeAt(0) === 172
并且172是AC
十六进制的。
向后工作C2
(十六进制的“多余”字符在前面)是十进制的194,并且
String.fromCharCode(194) === 'Â'
为什么
encodeURIComponent('¬')
return '%C2%AC'
,这似乎是调用的结果
encodeURIComponent('¬')
(本身返回'%C3%82%C2%AC'
)?
尽管JavaScript在内部使用UTF-16(或UCS-2),但它基于UTF-8执行URI编码。
序数172被编码为两个字节,因为它不再可以用ASCII表示;UTF-8中的两字节编码是通过以下方式完成的:
110xxxxx 10xxxxxx
代替x
我们填写172的二进制表示形式,即10101100:
11000010 10101100 = C2AC
^^^
pad
然后,此结果将进行百分比编码以最终形成形式%C2%AC
,即您在请求有效负载中看到的形式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句