IE:通过 href 调用函数,参数乱码

来源:互联网 发布:政治大纲解析 知乎 编辑:程序博客网 时间:2024/05/21 17:31

转自: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="#" onclick="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>

运行结果

从上到下,依次点击各链接,结果如下:

IE:通过 href 调用函数,参数乱码 - CPU风扇 - CPU 藏经阁

可以看到,点击foo1后,乱码了。

问题描述

通过 href 调用函数,参数若为中文 encodeURI 编码后的字符串,IE浏览器下乱码。

问题解析

1、上述调用,浏览器会先对参数自动解码;(参数必须是 encodeURI 编码后的字符串)

2、非IE浏览器使用相应的 decodeURI 解码;(仅测试了webkit核心)

3、IE浏览器(含IE9)使用 unescape 解码;(乱码原因)

解决办法

1、使用 onclick 代替 href 调用函数;(推荐,参见示例代码的foo5)

2、参数不编码,先做为 encodeURI 的参数,再一起传递给调用函数;(参见foo4)


原创粉丝点击