Maison > php教程 > php手册 > PHP正确解析UTF-8字符串

PHP正确解析UTF-8字符串

WBOY
Libérer: 2016-06-13 09:56:38
original
976 Les gens l'ont consulté

PHP正确解析UTF-8字符串有需要的朋友可参考一下。

 代码如下 复制代码

$str = '今天非常Happy,所有决定去KFC吃可乐鸡翅!!!';

/*
$str 是待截取的字符串
$len 是截取的字符数
*/
function utf8sub($str,$len) {
 if($len   return '';
 }
 
 $offset = 0; // 截取高位字节时的偏移量
 $chars = 0;  // 截取到的字符数
 $res = '';   // 存放截取的结果字符串
 
 while($chars   // 先取字符串的第一个字节
  // 将它转为十进制
  // 再转为二进制
  $high = ord(substr($str,$offset,1));
  
  // echo '$high='. $high .'
';

  if($high == null ){ // 如果取出高位为null,证明已经取到末尾,直接break
   break;
  } 
  if(($high>>2) === 0x3F){ // 将高位右移2位,和二进制111111比较,相同则取6个字节
   // 截取2个字节
   $count = 6;
  }else if(($high>>3) === 0x1F){ // 将高位右移2位,和二进制11111比较,相同则取5个字节
   // 截取3个字节
   $count = 5;
  }else if(($high>>4) === 0xF){ // 将高位右移2位,和二进制1111比较,相同则取4个字节
 
   // 截取4个字节
   $count = 4;
  }else if(($high>>5) === 0x7){ // 将高位右移2位,和二进制111比较,相同则取3个字节
  
   // 截取5个字节
   $count = 3;
  }else if(($high>>6) === 0x3){ // 将高位右移2位,和二进制11比较,相同则取2个字节
   // 截取6个字节
   $count = 2;
  }else if(($high>>7) === 0x0){ // 将高位右移2位,和二进制0比较,相同则取1个字节
   $count = 1;
  }
  // echo '$count='.$count.'
';
  
  $res .= substr($str,$offset,$count); // 取出一个字符与$res字符串连接
  $chars += 1;  // 截取到的字符数+1
  $offset += $count;  // 截取高位偏移量向后移$count字节
 }
 return $res;
}

echo utf8sub($str,100);

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal