0

在一个站点中有以下代码:

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

任何想法为什么会发生这种情况?

编辑://这里是网站

http://www.frombar.tv/

检查这场比赛

ATP / WTA 莫斯科(马卡罗娃 - 奇布尔科娃)

4

4 回答 4

1

您提供的字符串中有 18 个编码字符。

ATP / WTA Moscow长度为 18 个字符。

无论生成什么(Shvedova - Pavlyuchenkova),都不是您提供的代码。

也就是说,unescape对于非 ASCII 字符已损坏,因此已弃用

这是网站……</p>

括号中的文本作为常规 HTML 出现在脚本元素之后。

于 2012-10-16T13:27:14.180 回答
0
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';
于 2012-10-16T13:33:56.940 回答
0

该字符串不可能产生另一行。每个%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>
于 2012-10-16T13:26:11.260 回答
0

(什韦多娃 - 帕夫柳琴科娃)

在该代码之后添加。

%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"

于 2012-10-16T13:26:41.977 回答