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

yipeiwu_com6年前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 事件机制(2)

复制代码 代码如下: <?php class Event extends stdClass{ public $target=null; public $type=null; /**...

php命令行用法入门实例教程

php命令行用法入门实例教程

本文实例讲述了php命令行用法,分享给大家供大家参考。具体用法分析如下: Php是一个非常流行的web服务端脚本语言。其实,php不仅仅可以在web服务器中充当重要角色。在命令行一样可以...

php中Socket创建与监听实现方法

本文实例讲述了php中Socket创建与监听实现方法。分享给大家供大家参考。具体如下: 这里提供了在php中socket相关函数的一个实例,如创建Socket,接受一个socket连接...

php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】

本文实例讲述了php实现不通过扩展名准确判断文件类型的方法。分享给大家供大家参考,具体如下: 第一种方法 通过php的finfo_file() $handle=finfo_open(...

php 时间计算问题小结

具体如下: 1>如我们知道开始时间,要加减一个时间,得出一个结果时间,可以用以下代码 $time1='2008-10-1 12:30:30'; echo date('Y-m-d H...