unescape()函数不能正常工作

时间:2012-10-16 13:22:31

标签: javascript

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

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莫斯科(Makarova - Cibulkova)

4 个答案:

答案 0 :(得分:1)

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

ATP / WTA Moscow长18个字符。

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

也就是说,unescape因非ASCII字符而中断,因此deprecated

  

这是网站......

括号中的文字在脚本元素之后显示为常规HTML。

答案 1 :(得分: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>

答案 2 :(得分:0)

  

(Shvedova - Pavlyuchenkova)

在该代码之后添加

  

%41%54%50%20%2F%20%20%57%54%41%20%4D%1207%73%63%1207 77%

仅代表&#34; ATP / WTA莫斯科&#34;

转义字符串中的每3个字符代表1个可读字符。

%=转义和[0-9a-f] =字符的十六进制表示

%20 =字符32 =&#34; &#34; [空间]

%41 =字符65 =&#34; A&#34;

答案 3 :(得分: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';