当前位置:首页 > PHP教程 > php应用 > 列表

PHP学习之unicode与普通字符串的如何相互转化

发布:smiling 来源: PHP粉丝网  添加日期:2020-03-28 17:55:56 浏览: 评论:0 

本篇文章主要讲述了unicode与普通字符串的相互转化,具有一定参考价值,感兴趣的朋友了解一下。

unicode转字符串

方法一:json

  1. /** 
  2.  
  3.    * unicode转字符串,通过json转化 
  4.  
  5.    * @param $str 
  6.  
  7.    * @return string 
  8.  
  9.    */ 
  10.  
  11.   function unicode_decode_by_json($str
  12.  
  13.   { 
  14.  
  15.     $json = '{"str":"' . $str . '"}'
  16.  
  17.     $arr = json_decode($json, true); 
  18.  
  19.     if (emptyempty($arr)) return ''
  20.  
  21.     return $arr['str']; 
  22.  
  23.   } 

方法二:

  1. /** 
  2.  
  3.    * unicode转中文 
  4.  
  5.    * @param $data 
  6.  
  7.    * @return null|string|string[] 
  8.  
  9.    */ 
  10.  
  11.   function unicode_decode($data
  12.  
  13.   { 
  14.  
  15.     $rs = preg_replace_callback('/\\\\u([0-9a-f]{4})/i''replace_unicode_escape_sequence'$data); 
  16.  
  17.     return $rs
  18.  
  19.   } 
  20.  
  21.  
  22.  
  23.   function replace_unicode_escape_sequence($match
  24.  
  25.   { 
  26.  
  27.     return mb_convert_encoding(pack('H*'$match[1]), 'UTF-8''UCS-2BE'); 
  28.  
  29.   } 

字符串转unicode

  1. /** 
  2.  
  3.    * @param  string $str 需转换字符,这里为单个字符 
  4.  
  5.    * @return string 
  6.  
  7.    */ 
  8.  
  9.   function get_unicode($str
  10.  
  11.   { 
  12.  
  13.     $bin_str = ''
  14.  
  15.     $arr = is_array($str) ? $str : str_split($str);//获取字符内部数组表示,此时$arr应类似array(228, 189, 160) 
  16.  
  17.     foreach ($arr as $value$bin_str .= decbin(ord($value));//转成数字再转成二进制字符串,$bin_str应类似111001001011110110100000,如果是汉字"你" 
  18.  
  19.     $bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/''$1$2$3'$bin_str);//正则截取, $bin_str应类似0100111101100000,如果是汉字"你" 
  20.  
  21.  
  22.  
  23.     $unicode = dechex(bindec($bin_str));//返回unicode十六进制 
  24.  
  25.  
  26.  
  27.     $_sup = ''
  28.  
  29.     for ($i = 0; $i < 4 - strlen($unicode); $i++) $_sup .= '0';//补位高字节 0 
  30.  
  31.  
  32.  
  33.     return '\\u' . $_sup . $unicode//加上 \u  返回 
  34.  
  35.   } 
  36.  
  37.  
  38.  
  39.   /** 
  40.  
  41.    * 转化字符串为unicode 
  42.  
  43.    * @param $str string 可单个/复数个 
  44.  
  45.    * @return string 
  46.  
  47.    */ 
  48.  
  49.   function unicode_encode($str
  50.  
  51.   { 
  52.  
  53.     $_arr_str = preg_split('/(?<!^)(?!$)/u'$str);//拆分字符串为数组(含中文字符) 
  54.  
  55.  
  56.  
  57.     $_ret_unicode = ''
  58.  
  59.     foreach ($_arr_str as $_str$_ret_unicode .= get_unicode($_str); 
  60.  
  61.  
  62.  
  63.     return $_ret_unicode
  64.  
  65.   } 

测试效果:

  1. $_str_test = 'see,你看我哪里像好人'
  2.  
  3.  $_unicode = unicode_encode($_str_test); 
  4.  
  5.  echo $_str_test . ' <b style="color: red">=></b> ' . $_unicode'<br><br>'
  6.  
  7.  echo $_unicode . ' <b style="color: red">=></b> ' . unicode_decode($_unicode), '<br><br>'
  8.  
  9.  echo $_unicode . ' <b style="color: red">=></b> ' . unicode_decode_by_json($_unicode), '<br><br>'

Tags: unicode PHP字符串转化

分享到: