折腾了两天,终于找到原因了,不同浏览器之间的兼容性真是令人头痛的问题。
本来是想从page1.html页面将显示内容传递到page2.html页面,用js接受后显示在页面上,如果用英文一切ok,内容如下:
page1.html(gb2312)
function test() { var code = "00:00$午夜新闻%00:30$新闻1+1:时事开讲"; //var code = "sgsgd$sgd%fgsdg$fldg"; window.location = "page2.html?"+code; }
page2.html(gb2312)
var prog_link = location.search.substring(1);
var array_code = prog_link.split("%");
var word = "";
for(var i = 0; i < array_code.length; i++) {
word += array_code[i];
}
document.getElementById("id2").innerHTML = word;
但一换成中文就报错,于是google js编解码,说链接里不能直接传递中文,于是用 escape encodeURI encodeURIComponent 统统折腾一遍,还是不行。于是又想到可能是页面编码不对,于是把导入的js文件全改成直接写到页面里,还是不行。
后来无意中把测试数据改了改,居然好了,于是弹出数组的长度,发现是分割函数出了问题,分割后的数组长度为1(在IE下是2),根本没有分割开来。进一步测试,发现如果把测试数据放在page2.html文件里,ie和galio都可以分割成功,但如果是从page1.html传递过来的数据,galio分割会出问题。只要是%后面接两个以上的数字galio就无法用%来分隔字符串(IE正常)。
baidu到split方法:
写道
stringObj.split([separator[, limit]])
参数 separator
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
参数 separator
可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
和java一样,js的split方法的参数也可以是正则表达式,于是找了一下正则的特殊字符,
http://blog.csdn.net/laily/archive/2004/06/30/30517.aspx
发现%并没有特殊的含义,这就非常奇怪了,不知道galio这里为什么要这样处理。