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 相关文章推荐
cmd下运行php脚本
Nov 25 PHP
解析php curl_setopt 函数的相关应用及介绍
Jun 17 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
windows7下安装php的php-ssh2扩展教程
Jul 04 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
ThinkPHP有变量的where条件分页实例
Nov 03 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
深入解析PHP的Yii框架中的缓存功能
Mar 29 PHP
php获取一定范围内取N个不重复的随机数
May 28 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
PHP实现基于栈的后缀表达式求值功能
Nov 10 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
Oct 15 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 字符串 小常识
2009/06/05 PHP
php 传值赋值与引用赋值的区别
2010/12/29 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
基于jquery实现的表格分页实现代码
2011/06/21 Javascript
jquery select 设置默认选中的示例代码
2014/02/07 Javascript
node.js中的console用法总结
2014/12/15 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
jQuery位置选择器用法实例分析
2019/06/28 jQuery
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
欧洲品牌瓷器餐具网上商店:Porzellantreff.de
2018/04/04 全球购物
Etam俄罗斯:法国女士内衣和家居服网上商店
2019/10/30 全球购物
求职信怎么写
2014/05/23 职场文书
消防安全宣传标语
2014/06/07 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
财务会计实训报告
2014/11/05 职场文书
大学生党性分析材料
2014/12/19 职场文书
好媳妇事迹材料
2014/12/24 职场文书
介绍信怎么写
2015/01/30 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
校本培训个人总结
2015/02/28 职场文书
总结Python常用的魔法方法
2021/05/25 Python
python图像处理 PIL Image操作实例
2022/04/09 Python
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript