噢,上面第二种方式多了个等号,应该是:/text/%E6%96%B0%E7%9A%84%26lt%3B 

解决方案 »

  1.   

    楼上正解/test/=%E6%96%B0%E7%9A%84%26lt%3B 
    正则转换后
    test.php?param==%E6%96%B0%E7%9A%84%26lt%3B打印一下看看
    2、为什么直接$_GET到的数据不需要urldecode()就能正确显示?get传值自动解码
      

  2.   

    晕,楼上梦之队的老兄呀,沙发那是我自己,正文里我打错了....
    问题应该是在.htaccess应用
    RewriteRule ^test/(.+)  test.php?param=$1
    规则时,是将解码以后的URL进行解码以后进行的
    就是说:
    /test/%E6%96%B0%E7%9A%84%26lt%3B
    在通过转换以后,并不是单纯的:/test.php?param=新的<
    而不是:/test.php?param=新的%E6%96%B0%E7%9A%84%26lt%3B
      

  3.   

    估计是自动解码了htmlentities(urlencode($userinput)), 
    试试这个,用这个传值<?php
    echo '<a href="mycgi?foo=', htmlentities(urlencode($userinput)), '">';
    ?>