万事屋软件科技

php 乱码 iconv

iconvlib是由系统提供的。
UCS-2编码一般默认是大头,今天在一台机器上居然是小头(CentOS xeon64),最后统统把UCS-2改成UCS-2BE。
有兴趣试试下面的PHP代码:
echo iconv('UCS-2', 'gbk', pack('H4','8F66'));
echo iconv('UCS-2LE', 'gbk', pack('H4', '8F66'));
echo iconv('UCS-2BE', 'gbk', pack('H4', '8F66'));
在centos某些机器上默认ucs-2即ucs-2LE。


iconv.c:197:names for UCS-2LE: UCS-2LE

debian  为  UCS-2BE


  1. <?php  

  2. function phpunescape($str) {    

  3.     $str = rawurldecode ( $str );    

  4.     preg_match_all ( "/%u.{4}|&#x.{4};|&#\d+;|.+/U"$str$r );    

  5.     $ar = $r [0];    

  6.     foreach ( $ar as $k => $v ) {    

  7.         if (iconv_substr ( $v, 0, 2 ) == '%u')    

  8.             $ar [$k] = iconv ( 'UCS-2BE''gbk', pack ( 'H4', iconv_substr ( $v, - 4,4 ) ) );    

  9.         elseif (substr ( $v, 0, 3 ) == '&#x')    

  10.             $ar [$k] = iconv ( 'UCS-2BE''gbk', pack ( 'H4'substr ( $v, 3, - 1 ) ) );    

  11.         elseif (substr ( $v, 0, 2 ) == '&#') {    

  12.             $ar [$k] = iconv ( 'UCS-2BE''gbk', pack ( 'n'substr ( $v, 2, - 1 ) ) );    

  13.         }    

  14.     }    

  15.     return join ( ''$ar );    

  16. }   

  17. $now_time=date("Y-m-d H:i:s");  

  18. echo $now_time.'<br>时尚欣欣65<br>解码之后:';  

  19. echo phpunescape('%u65F6%u5C1A%u6B23%u6B2365');  

  20. //echo curlGetRurl('http://iframe.ip138.com/ic.asp',10);  

  21. ?>