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


Posted in PHP onMay 02, 2009
//截取字符串长度。支持utf-8和gb2312编码。若为gb2312,先将其转为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 相关文章推荐
PHP insert语法详解
Jun 07 PHP
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
解析mysql left( right ) join使用on与where筛选的差异
Jun 18 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
PHP中把有符号整型转换为无符号整型方法
May 27 PHP
php之static静态属性与静态方法实例分析
Jul 30 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
PHP+ajax实现二级联动菜单功能示例
Aug 10 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
apache2.2.4+mysql5.0.77+php5.2.8安装精简
Apr 29 #PHP
PHP 读取文件的正确方法
Apr 29 #PHP
PHP session有效期问题
Apr 26 #PHP
PHP 判断常量,变量和函数是否存在
Apr 26 #PHP
PHP memcache扩展的三种安装方法
Apr 26 #PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
Apr 26 #PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 #PHP
You might like
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
php批量删除超链接的实现方法
2015/10/19 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
Thinkphp 3.2框架使用Redis的方法详解
2019/10/24 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
验证手机号码的JS方法分享
2013/09/10 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
理解javascript回调函数
2014/12/28 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
javascript函数特点实例分析
2015/05/14 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
2015/12/18 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
React实践之Tree组件的使用方法
2017/09/30 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
关于Layui Table隐藏列问题
2019/09/16 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
2019/04/25 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
茶叶生产计划书
2014/01/10 职场文书
保险经纪人求职信
2014/03/11 职场文书
校园活动宣传方案
2014/03/28 职场文书
教师节倡议书2015
2015/04/27 职场文书
逃出克隆岛观后感
2015/06/09 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书