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 相关文章推荐
JAVA/JSP学习系列之七
Oct 09 PHP
php float不四舍五入截取浮点型字符串方法总结
Oct 28 PHP
Linux下php5.4启动脚本
Aug 03 PHP
php模拟服务器实现autoindex效果的方法
Mar 10 PHP
PHP动态柱状图实现方法
Mar 30 PHP
学习php设计模式 php实现享元模式(flyweight)
Dec 07 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
PHP微信分享开发详解
Jan 14 PHP
php实现微信企业号支付个人的方法详解
Jul 26 PHP
PHP children()函数讲解
Feb 03 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
Mar 29 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中的extract的作用分析
2008/04/09 PHP
php中的三元运算符使用说明
2011/07/03 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
JavaScript 事件记录使用说明
2009/10/20 Javascript
juqery 学习之六 CSS--css、位置、宽高
2011/02/11 Javascript
ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题
2012/12/11 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
JQuery中层次选择器用法实例详解
2015/05/18 Javascript
jQuery移动页面开发中的触摸事件与虚拟鼠标事件简介
2015/12/03 Javascript
jQuery实现简单的图片查看器
2020/09/11 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
JavaScript学习笔记之惰性函数示例详解
2017/08/27 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
基于vue hash模式微信分享#号的解决
2020/09/07 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
Python计算三维矢量幅度的方法
2015/06/15 Python
Python中将字典转换为XML以及相关的命名空间解析
2015/10/15 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Python截图并保存的具体实例
2021/01/14 Python
PHP如何去执行一个SQL语句
2016/03/05 面试题
.NET程序员的几道面试题
2012/06/01 面试题
自我评价中英文语句
2013/11/30 职场文书
2014学校领导四风问题对照检查材料思想汇报
2014/09/22 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
2015年节能降耗工作总结
2015/05/22 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
JavaScript中10个Reduce常用场景技巧
2022/06/21 Javascript