linux下php中文UTF-8转换Unicode方法和注意事项

linux下php中文UTF-8转换Unicode方法和注意事项

先贴代码:

  
  /*Unicode 编码*/
  function unicode_encode($name){
      //$name = iconv('UTF-8', 'UCS-2', $name); //windows
      $name = iconv('UTF-8', 'UCS-2BE', $name); //linux
      $len = strlen($name);
      $str = '';
      for ($i = 0; $i < $len - 1; $i = $i + 2){
          $c = $name[$i];
          $c2 = $name[$i + 1];
          if (ord($c) > 0){
              $str .= '\u'.base_convert(ord($c), 10, 16).str_pad(base_convert(ord($c2), 10, 16), 2, 0, STR_PAD_LEFT);
          }else{
              $str .= $c2;
          }
      }
      return $str;
    }

没有注释过的代码在Windows环境下是编码正常的,但在Linux下转换出来的两个字符是相反的,用在线unicode转换工具出来的结果是乱码。

那么解决方法也很简单 直接用我上面Linux的代码就可以了 


UCS-2的编码规则: 
windows下默认是UCS-2LE。
linux下默认是UCS-2BE。用iconv(指定UCS-2)来转换生成的是UCS-2BE的unicode,但可能php环境配置会导致不是UCS-2BE。
windows和linux等多个平台对 UCS-2 的理解不同(UCS-2LE,UCS-2BE),所以为了统一需要直接指定为UCS-2BE。

即把:

      $name = iconv('UTF-8', 'UCS-2', $name); //windows

改为:

  $name = iconv('UTF-8', 'UCS-2BE', $name); //linux

亲测转换出来的unicode可以正常编码。

附件下载

回复列表



回复操作

正在加载验证码......

请先拖动验证码到相应位置

发布时间:2018-10-28 16:06:33

修改时间:2018-10-28 16:06:33

查看次数:1460

评论次数:0