今天测试了以下url编码的几个函数,很是疑惑,测试代码如下:
test.php<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
    <?php
    $str=<<<st
    <script>
    function gotoindex()
    {
        //var name= encodeURIComponent("何林");
        var name="何林";
        var url="index.php?name="+name;
        alert("第一次加码:"+url);
        url=encodeURI(url);
        alert("第二次加码:"+url);
        top.location.href=url;
    }
    gotoindex();
    </script>
st;
    echo $str;
    ?>
    </body>
</html>////////////////////////////////////
index.php<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        $name=$_GET['name'];
        echo "未解码:".$name;
        $name=urldecode($name);
        echo "已解码:".$name;
        ?>
    </body>
</html>如果在test页面中不对name编码用firefox跳转到index中去后url地址没有被编码还是直接显示中文“何林”,但是在test页面中的输出显示已经被编码,而在我直接把那个网址拷贝粘帖到这里的时候发现已经编码了如:http://localhost/phpCode/index.php?name=%E4%BD%95%E6%9E%97。在用php显示的时候它也可以直接显示汉字,未解码就可以输出汉字。
当用IE打开的时候就在地址栏显示了已经编码的内容,php输出也不需要解码。
当对test中的name也编码的时候,即进行了两次编码后。发现firefox和IE就得到了想要的效果。出现这个现象是firefox 和IE本身的特性决定的吗,是不是它们都会对编码的URL解码,而且在firefox中还会将解码的汉字在地址栏中显示?firefox这样做是不是想让url显示更人性化,编码本来不是为了隐蔽信息,也不是为了隐蔽信息。只是为了传输和浏览器解析的时候不会因为参数中的一些空白或中文出错。
还是代码或者一些设置的问题,请高手谈谈。