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 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
基于php socket(fsockopen)的应用实例分析
Jun 02 PHP
php递归使用示例(php递归函数)
Feb 14 PHP
PHP实现的下载远程图片自定义函数分享
Jan 28 PHP
PHP Oauth授权和本地加密实现方法
Aug 12 PHP
用PHP的socket实现客户端到服务端的通信实例详解
Feb 04 PHP
PHP中单例模式与工厂模式详解
Feb 17 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
Aug 15 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 PHP
PHP开发api接口安全验证操作实例详解
Mar 26 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
JavaScript 学习笔记 Black.Caffeine 09.11.28
2009/11/30 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
jquery实现效果比较好的table选中行颜色
2014/03/25 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
Javarscript中模块(module)、加载(load)与捆绑(bundle)详解
2017/05/28 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
2019/09/16 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
原生js实现移动小球(碰撞检测)
2020/12/17 Javascript
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
python获取本机mac地址和ip地址的方法
2015/04/29 Python
python django 增删改查操作 数据库Mysql
2017/07/27 Python
python安装numpy&amp;安装matplotlib&amp; scipy的教程
2017/11/02 Python
Python中装饰器学习总结
2018/02/10 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
Python创建或生成列表的操作方法
2019/06/19 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
Python操作Sonqube API获取检测结果并打印过程解析
2019/11/27 Python
Django Serializer HiddenField隐藏字段实例
2020/03/31 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
详解canvas.toDataURL()报错的解决方案全都在这了
2020/03/31 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
《夏夜多美》教学反思
2014/02/17 职场文书
小学生倡议书范文
2014/05/13 职场文书
夫妻分居协议书范文
2014/11/26 职场文书
在职证明格式样本
2015/06/15 职场文书
如何用PHP实现分布算法之一致性哈希算法
2021/05/26 PHP
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技