在一个站点中有以下代码:
document.write(unescape('%41%54%50%20%2f%20%20%57%54%41%20%4d%6f%73%63%6f%77'));
这会产生
ATP / WTA Moscow (Shvedova - Pavlyuchenkova)
但是如果运行该代码,我只会得到ATP / WTA Moscow
任何想法为什么会发生这种情况?
编辑://这里是网站
检查这场比赛
ATP / WTA 莫斯科(马卡罗娃 - 奇布尔科娃)
在一个站点中有以下代码:
document.write(unescape('%41%54%50%20%2f%20%20%57%54%41%20%4d%6f%73%63%6f%77'));
这会产生
ATP / WTA Moscow (Shvedova - Pavlyuchenkova)
但是如果运行该代码,我只会得到ATP / WTA Moscow
任何想法为什么会发生这种情况?
编辑://这里是网站
检查这场比赛
ATP / WTA 莫斯科(马卡罗娃 - 奇布尔科娃)
您提供的字符串中有 18 个编码字符。
ATP / WTA Moscow长度为 18 个字符。
无论生成什么(Shvedova - Pavlyuchenkova),都不是您提供的代码。
也就是说,unescape对于非 ASCII 字符已损坏,因此已弃用
这是网站……</p>
括号中的文本作为常规 HTML 出现在脚本元素之后。
str = Array.prototype.map.call('ATP / WTA Moscow (Shvedova - Pavlyuchenkova)', function(x){return '%'+x.charCodeAt(0).toString(16);}).join('');
str === '%41%54%50%20%2f%20%20%57%54%41%20%4d%6f%73%63%6f%77%20%28%53%68%76%65%64%6f%76%61%20%2d%20%50%61%76%6c%79%75%63%68%65%6e%6b%6f%76%61%29';
str !== '%41%54%50%20%2f%20%20%57%54%41%20%4d%6f%73%63%6f%77';
该字符串不可能产生另一行。每个%XX代表一个字母。unescape 不能神奇地组成不在该字符串中的字符。
随着编辑。查看页面源码你会看到()中的文字不在unescape调用中
<script language='Javascript'>document.write(unescape('%41%54%50%20%2f%20%20%57%54%41%20%4d%6f%73%63%6f%77'));</script> (Kuznetsov - Berlocq)</a></td>
(什韦多娃 - 帕夫柳琴科娃)
在该代码之后添加。
%41%54%50%20%2f%20%20%57%54%41%20%4d%6f%73%63%6f%77
仅代表“ATP / WTA 莫斯科”
转义字符串中的每 3 个字符代表 1 个可读字符。
% = 转义和 [0-9a-f] = 字符的十六进制表示
%20 = 字符 32 = " " [空格]
%41 = 字符 65 = "A"