好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP正确解析UTF-8字符串 - php函数

PHP正确解析UTF-8字符串

$str  =  '今天非常Happy,所有决定去KFC吃可乐鸡翅!!!' ;  /*   $str 是待截取的字符串   $len 是截取的字符数   */   function  utf8sub( $str , $len ) {    if ( $len  <= 0){     return   '' ;   }       $offset  = 0;  // 截取高位字节时的偏移量     $chars  = 0;   // 截取到的字符数     $res  =  '' ;    // 存放截取的结果字符串        while ( $chars  <  $len ){     // 先取字符串的第一个字节      // 将它转为十进制      // 再转为二进制      $high  = ord( substr ( $str , $offset ,1));         // echo '$high='. $high .'<br />';      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.'<br />';          $res  .=  substr ( $str , $offset , $count );  // 取出一个字符与$res字符串连接      $chars  += 1;   // 截取到的字符数+1      $offset  +=  $count ;   // 截取高位偏移量向后移$count字节     }    return   $res ;  }  echo  utf8sub( $str ,100); 

查看更多关于PHP正确解析UTF-8字符串 - php函数的详细内容...

  阅读:42次