今天遇到一个问题。gbk编码的字“扙",urlencode后对应的是%92E,但是再用decode后却不能还原为“扙”,一个中文字符在urlencode后不都是两个%xx%xx吗?这里怎么是一个%xxx。对应的用java测试后encode结果是“%92%45”

解决方案 »

  1.   

    我这里测试是正常的,解码用urldecode
      

  2.   

    是gbk编码吗?
      

  3.   

    $s = '扙';
    echo $t = urlencode($s);//%92E
    echo urldecode($t);//扙编码解码都未有问题
    E 的十六进制内码是 45, 而 扙 的第二字节十六进制内码也是 45。
    所以 E 和 %45 是等效的,如果是你自己在写 url 解码程序,那么就要注意到这个事实
      

  4.   


    目前我是用java的URLDecoder.decode("xxxxx","GBK");去反解,这样解出来的就是乱码。
      

  5.   

    那是 java 认为 RFC 1738 标准太老了,自己随心所欲了
    应对这种情况你可以写个自己的url编码函数
    function myurlencode($str) {
      return '%' . join('%', array_map('dechex', pack('C*', $str));
    }