转自:http://xyztony1985.blog.163.com/blog/static/36117820111112511147/
示例代码
<
a href=
"javascript:foo('CPU%E9%A3%8E%E6%89%87')"
>foo1<
/a><
br />
< a href= "javascript:foo('CPU%u98CE%u6247')" >foo2< /a>< br />
< a href= "javascript:foo(escape('CPU风扇'))" >foo3< /a>< br />
< a href= "javascript:foo(encodeURI('CPU风扇'))" >foo4< /a>< br />
< a href= "#" οnclick= "foo('CPU%E9%A3%8E%E6%89%87')" >foo5< /a>< br />
< textarea rows= "8" cols= "50" id= "txt" >< /textarea>
< script type= "text/javascript" >
var txt = document.getElementById( 'txt');
function foo(msg,src)
{
txt.value = txt.value + msg + '\r\n';
}
< /script>
< a href= "javascript:foo('CPU%u98CE%u6247')" >foo2< /a>< br />
< a href= "javascript:foo(escape('CPU风扇'))" >foo3< /a>< br />
< a href= "javascript:foo(encodeURI('CPU风扇'))" >foo4< /a>< br />
< a href= "#" οnclick= "foo('CPU%E9%A3%8E%E6%89%87')" >foo5< /a>< br />
< textarea rows= "8" cols= "50" id= "txt" >< /textarea>
< script type= "text/javascript" >
var txt = document.getElementById( 'txt');
function foo(msg,src)
{
txt.value = txt.value + msg + '\r\n';
}
< /script>
运行结果
从上到下,依次点击各链接,结果如下:
可以看到,点击foo1后,乱码了。
问题描述
通过 href 调用函数,参数若为中文 encodeURI 编码后的字符串,IE浏览器下乱码。
问题解析
1、上述调用,浏览器会先对参数自动解码;(参数必须是 encodeURI 编码后的字符串)
2、非IE浏览器使用相应的 decodeURI 解码;(仅测试了webkit核心)
3、IE浏览器(含IE9)使用 unescape 解码;(乱码原因)
解决办法
1、使用 onclick 代替 href 调用函数;(推荐,参见示例代码的foo5)
2、参数不编码,先做为 encodeURI 的参数,再一起传递给调用函数;(参见foo4)