LEN

用PHP实现关于UTF-8 的转换过程,已知UNICODE码,得到这个UNICODE码的UTF-8格式的汉字;反之,已经知道一个汉字的UTF-8字符串,提取出UNNICODE码。
观看他人代码写的,通过这道题,明白了如何进行unicode和utf-8之间的转换,收获很大utf-8格式汉字转换为...
扫描右侧二维码阅读全文
03
2016/03

用PHP实现关于UTF-8 的转换过程,已知UNICODE码,得到这个UNICODE码的UTF-8格式的汉字;反之,已经知道一个汉字的UTF-8字符串,提取出UNNICODE码。

观看他人代码写的,通过这道题,明白了如何进行unicode和utf-8之间的转换,收获很大

utf-8格式汉字转换为 unicode码

$utf = '李';
//utf-8格式汉字转换为 unicode码
function utf8_unicode($utf)
{
  if(strlen($utf)!=3) return false;
  //1. 将每个字节转换为ascll码 10进制
  $a = ord($utf[0]);
  $b = ord($utf[1]);
  $c = ord($utf[2]);
  //2. 将10进制转换为2进制
  $str1 = base_convert($a,10,2);
  $str2 = base_convert($b,10,2);
  $str3 = base_convert($c,10,2);
  //3. 根据 1110xxxx 10xxxxxx 10xxxxxx 格式 从右往左 反向得到unicode码的二进制码
  $str1 = substr($str1, 4);
  $str2 = substr($str2, 2);
  $str3 = substr($str3, 2);
  //4. 将三个字节的2进制组合 转换为10进制
  return base_convert($str1.$str2.$str3,2,10);
}
echo '<hr />';
echo $unicode = utf8_unicode($utf);

unicode码转换为utf-8格式汉字

//unicode码转换为utf-8格式汉字
function unicode_utf8($unicode)
{
  $unicode = intval($unicode);
  //1. 将unicode码转换为2进制
  $num = base_convert($unicode,10,2);
  //2. 根据 1110xxxx 10xxxxxx 10xxxxxx 格式 从右往左依次补齐
  $c = '10'.substr($num,-6); 
  $b = '10'.substr($num,-12,6);
  $len = strlen($num)-12; 
  $a = substr($num,0,$len);
  $a = '1110'.str_repeat('0',4-$len).$a;
  //3. 将得到的二进制码转换为10十进制
  $a = base_convert($a,2,10);
  $b = base_convert($b,2,10);
  $c = base_convert($c,2,10);
  var_dump( chr($a).chr($b).chr($c));
  return chr($a).chr($b).chr($c);
}
echo '<hr />';
echo unicode_utf8($unicode);
Last modification:March 2nd, 2017 at 10:53 am
If you think my article is useful to you, please feel free to appreciate

Leave a Comment