php按字符无乱码截取中文的方法

5年以前  |  阅读数:474 次  |  编程语言:PHP 

本文实例讲述了php按字符无乱码截取中文的方法。分享给大家供大家参考。具体实现方法如下:


    <?php
    //$str 待截取的字符串
    //$len 截取的字符个数
    //$chars 已经截取的字符数
    //$res  保存的字符串
    //$chars 保存已经截取的字符串个数
    //$offset 截取的偏移量
    //$length 字符串的字节数
    //若$len>$str的字符个数,造成无谓的while循环,($offset<$length限定)
    function utf8sub($str,$len){
      if($len<=0){
        return ;
      }
      $res="";
      $offset=0;
      $chars=0;
      $length=strlen($str);
      while($chars<$len && $offset<$length){
        $hign=decbin(ord(substr($str,$offset,1)));
          if(strlen($hign)<8){
            $count=1;
          }elseif(substr($hign,0,3)=="110"){
            $count=2;
          }elseif(substr($hign,0,4)=="1110"){
            $count=3;
          }elseif(substr($hign,0,5)=="11110"){
            $count=4;
          }elseif(substr($hign,0,6)=="111110"){
            $count=5;
          }elseif(substr($hign,0,7)=="1111110"){
            $count=6;
          }
        $res.=substr($str,$offset,$count);
        $offset+=$count;
        $chars+=1;
      }
      return $res;
    }
    function utf8sub1($str,$len){
      $chars=0;
      $res="";
      $offset=0;
      $length=strlen($str);
      while($chars<$len && $offset<$length){
        $hign=decbin(ord(substr($str,$offset,1)));
        if(strlen($hign)<8){
          $count=1;
        }elseif($hign & "11100000"=="11000000"){
          $count=2;
        }elseif($hign & "11110000"=="11100000"){
          $count=3;
        }elseif($hign & "11111000"=="11110000"){
          $count=4;
        }elseif($hign & "11111100"=="11111000"){
          $count=5;
        }elseif($hign & "11111110"=="11111100"){
          $count=6;
        }
        $res.=substr($str,$offset,$count);
        $chars++;
        $offset+=$count;
      }
      return $res;
    }
    $a="中华ah人民hdj";
    echo utf8sub($a,5);
    ?>

希望本文所述对大家的php程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例