0

我有一个包含JS文件的HTML页面的代码如下。函数d()收到24个字符的字符串,包括3个不可打印的字符(ASCII 005),并计算包含多少个字符。此号码显示警报()。Internet Explorer中Javascript功能缺失的非打印字符

  • 谷歌浏览器:正确显示24作为结果。
  • 谷歌浏览器(JS调试器):正确显示24作为结果。
  • Internet Explorer 9:正确显示24作为结果。
  • Internet Explorer 9(JS调试器):只显示21(24 - 3不可打印)。

我真的需要这个与Internet Explorer一起工作。有任何想法吗?感谢

的test.html

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>JavaScript Scripting</title> 
</head> 
<body> 
<script type="text/javascript" charset="utf-8" src="test.js"> 
</script> 
</body> 
</html> 

TEST.JS

function d(a){return a.length;}; 
document.write("<script language=\"Javascript\" charset=\"utf-8\">alert(".concat(d("a[NULL]lert(\"He[NULL]llo Worl[NULL]d\");")).concat(");</script>")); 
+0

为什么不只返回字符串的长度? – kirilloid 2012-03-11 11:22:15

+0

谢谢。我做了,问题在那里。我更新了问题的结果。 – Arturo 2012-03-11 12:51:40

+1

嗯。你试图逃脱那些chars?即把它们作为'\ x05'或'\ u0005'。另外,请添加问题,您使用的是哪个版本的IE。 – kirilloid 2012-03-11 13:04:13

回答

1

你应该知道 IE失去了这个字节!但它看起来好像错过了分割:检查IE是否在“”==“\ u0005”上返回true“。尽量避免使用像smth +""这样的使用toString()(你会在'Infinity' -0之后得到什么?)。或者使用var i= 0; while (a.length) { substr(a, 0, 1); i+=1; //...没有IE来测试,但可以帮助。

UPD

As provided by MSDN IE不是在标准模式和小于9个计算"\v" == "v",因此它可以是具有nullchar这导致串长度变短相同?

+0

感谢您的评论。非常有趣的“\ v”更新。我正在使用IE9。我已经更新了我的问题,因为似乎问题出在了接收到的字符串上,因为如果我做a.length,我会在IE中获得21而不是24。而且很奇怪:它只是在IE9 JS DEBUGGER上失败,但在IE9浏览器上,我正确接收了24.也许是一个字符集问题? – Arturo 2012-03-11 12:51:09

+1

甚至没有确定。如果IE工作正常,调试器没有。也许调试器每次都处于非标准模式?你是否试图用调试器检查本地字符串长度? – 2012-03-11 13:06:10

+0

你说的对,IE9 JS调试器默认情况下是非标准模式。只需要改变这一点。非常感谢你。 – Arturo 2012-03-11 17:50:06