zoukankan      html  css  js  c++  java
  • php unicode编码和字符串互转

    php字符串转Unicode编码, Unicode编码转php字符

    百度了很多,都一样, 要么不对, 要不就是只是把字符串的汉字转Unicode

    经过多次试验查找, 找到了如下方法,

    注意:字符串编码必须是utf-8,如果不是自行用icon转一下

    //字符串转Unicode编码
    function unicode_encode($strLong) {
      $strArr = preg_split('/(?<!^)(?!$)/u', $strLong);//拆分字符串为数组(含中文字符)
      $resUnicode = '';
      foreach ($strArr as $str)
      {
          $bin_str = '';
          $arr = is_array($str) ? $str : str_split($str);//获取字符内部数组表示,此时$arr应类似array(228, 189, 160)
          foreach ($arr as $value)
          {
              $bin_str .= decbin(ord($value));//转成数字再转成二进制字符串,$bin_str应类似111001001011110110100000,如果是汉字"你"
          }
          $bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/', '$1$2$3', $bin_str);//正则截取, $bin_str应类似0100111101100000,如果是汉字"你"
          $unicode = dechex(bindec($bin_str));//返回unicode十六进制
          $_sup = '';
          for ($i = 0; $i < 4 - strlen($unicode); $i++)
          {
              $_sup .= '0';//补位高字节 0
          }
          $str =  '\u' . $_sup . $unicode; //加上 u  返回
          $resUnicode .= $str;
      }
      return $resUnicode;
    }
    //Unicode编码转字符串方法1
    function unicode_decode($name)
    {
      // 转换编码,将Unicode编码转换成可以浏览的utf-8编码
      $pattern = '/([w]+)|(\u([w]{4}))/i';
      preg_match_all($pattern, $name, $matches);
      if (!empty($matches))
      {
        $name = '';
        for ($j = 0; $j < count($matches[0]); $j++)
        {
          $str = $matches[0][$j];
          if (strpos($str, '\u') === 0)
          {
            $code = base_convert(substr($str, 2, 2), 16, 10);
            $code2 = base_convert(substr($str, 4), 16, 10);
            $c = chr($code).chr($code2);
            $c = iconv('UCS-2', 'UTF-8', $c);
            $name .= $c;
          }
          else
          {
            $name .= $str;
          }
        }
      }
      return $name;
    }
    //Unicode编码转字符串
    function unicode_decode2($str){
      $json = '{"str":"' . $str . '"}';
      $arr = json_decode($json, true);
      if (empty($arr)) return '';
      return $arr['str'];
    }
    
    
    echo unicode_encode('若水小站:qq963087326'),'<br>';
    //结果u82e5u6c34u5c0fu7ad9u003au0071u0071u0039u0036u0033u0030u0038u0037u0033u0032u0036
    
    echo unicode_decode('u82e5u6c34u5c0fu7ad9u003au0071u0071u0039u0036u0033u0030u0038u0037u0033u0032u0036');
    //结果若水小站:qq963087326

    参考地址:https://www.cnblogs.com/cmnull/p/10030899.html

    https://www.jb51.net/article/104925.htm(脚本之家网站,里面的unicode_encode字符串转Unicode,经本人测试"小"字不对)

  • 相关阅读:
    二、制作BOM表格--物料表格--Bill of Materials
    一、生成网络表--create Netlist
    Python使用OpenCV实现简单的人脸检测
    Spring编程式和声明式事务实例讲解
    可能是最漂亮的Spring事务管理详解
    关于Java IO与NIO知识都在这里
    Java IO,硬骨头也能变软
    Java NIO之拥抱Path和Files
    Java NIO之Selector(选择器)
    Java NIO 之 Channel(通道)
  • 原文地址:https://www.cnblogs.com/wangzhaobo/p/10682945.html
Copyright © 2011-2022 走看看