PHP 字符串编码截取函数(兼容utf-8和utf-8)

 更新时间:2009年05月02日 01:27:24   作者:   我要评论
昨天晚上和今天上午看了字符编码的问题,还有一些别人截取字符串的函数,自己也写了一个,兼容utf-8和utf-8的
复制代码 代码如下:

//截取字符串长度。支持utf-8和utf-8编码。若为utf-8,先将其转为utf-8,在utf-8的基础上截取然后再转换回来
function cut_string($str,$from=1,$length=10,$code='utf-8',$rear='...'){
    if($code!='utf-8'){//总是将字符串转为utf-8编码
        $str=iconv($code,'utf-8',$str);
    }
    $str_len=mb_strlen($str,'utf-8');//字符串的长度
    if($from>$str_len){//如果截取开始位置大于字符串长度,截取后面$length个
        $from=$str_len-$length+1;
        $from=($from<1?1:$from);
    }
    //兼容ucs-4编码
    $i=0;//字节计数
    $from_i=0;//开始截取的字节位置
    $from_len=0;//开始截取的字符位置
    $tag=true;//标志$from_len是否已经被赋值
    for($temp_len=0;($temp_len-$from_len<$length)||$tag;$temp_len++){
        $byte_code=ord(substr($str,$i,1));//一个字节的编码
        if($temp_len+1==$from){//记录开始截取的开始字节位置
            $from_i=$i;$from_len=$temp_len;$tag=false;
        }
        if($byte_code>=0&&$byte_code<128){//字符是占用几个字节,utf-8是变长编码,根据每个字符的第一个字节可判断出该字符占几个字节
            $i++;
        }
        if($byte_code>191&&$byte_code<224){
            $i+=2;
        }
        if($byte_code>223&&$byte_code<240){
            $i+=3;
        }
        if($byte_code>239&&$byte_code<248){
            $i+=4;
        }
        if($byte_code>248&&$byte_code<252){
            $i+=5;
        }
        if($byte_code>252&&$byte_code<255){
            $i+=6;
        }
    }
    return iconv('utf-8',$code,substr($str,$from_i,$i-$from_i).$rear);
}

相关文章

  • 深入理解PHP 数组之count 函数

    深入理解PHP 数组之count 函数

    下面小编就为大家带来一篇深入理解PHP 数组之count 函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • cakephp2.X多表联合查询join及使用分页查询的方法

    cakephp2.X多表联合查询join及使用分页查询的方法

    这篇文章主要介绍了cakephp2.X多表联合查询join及使用分页查询的方法,结合实例形式简单分析了cakephp查询及分页操作相关技巧,需要的朋友可以参考下
    2017-02-02
  • php快递单号查询接口使用示例

    php快递单号查询接口使用示例

    这篇文章主要介绍了php快递单号查询接口使用示例,需要的朋友可以参考下
    2014-05-05
  • 万能的php分页类

    万能的php分页类

    这篇文章主要为大家详细介绍了万能的php分页类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • PHP实现自动发送邮件功能代码(qq 邮箱)

    PHP实现自动发送邮件功能代码(qq 邮箱)

    本文给大家分享以qq邮箱为例给大家介绍PHP实现自动发送邮件功能代码,感兴趣的朋友参考下吧
    2017-08-08
  • php下载文件的代码示例

    php下载文件的代码示例

    php下载文件的代码示例,需要的朋友可以参考下
    2012-06-06
  • Laravel中unique和exists验证规则的优化详解

    Laravel中unique和exists验证规则的优化详解

    这篇文章主要给大家介绍了关于Laravel中unique和exists验证规则的优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-01-01
  • ThinkPHP框架实现用户信息查询更新及删除功能示例

    ThinkPHP框架实现用户信息查询更新及删除功能示例

    这篇文章主要介绍了ThinkPHP框架实现用户信息查询更新及删除功能,结合实例形式分析了thinkPHP框架金沙国际官网配置、控制与模板调用实现信息查询、更新、删除等功能相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • thinkphp5上传图片及生成缩略图公共方法(分享)

    thinkphp5上传图片及生成缩略图公共方法(分享)

    下面小编就为大家分享一篇thinkphp5上传图片及生成缩略图公共方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Laravel 5.5中为响应请求提供的可响应接口详解

    Laravel 5.5中为响应请求提供的可响应接口详解

    这篇文章主要给大家介绍了关于Laravel 5.5中为响应请求提供的可响应接口的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11

最新评论