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+APACHE实现用户论证的方法
Oct 09 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
浅谈PHP中的
Apr 23 PHP
Zend Framework处理Json数据方法详解
Dec 09 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
Laravel相关的一些故障解决
Aug 19 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计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PHP数组与字符串互相转换实例
2020/05/05 PHP
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
javascript在当前窗口关闭前检测窗口是否关闭
2014/09/29 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jQuery使用之标记元素属性用法实例
2015/01/19 Javascript
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
详解webpack编译多页面vue项目的配置问题
2017/12/11 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
vue-cli webpack配置文件分析
2019/05/20 Javascript
使用JQuery自动完成插件Auto Complete详解
2019/06/18 jQuery
利用js实现简易红绿灯
2020/10/15 Javascript
Python字符遍历的艺术
2008/09/06 Python
用tensorflow搭建CNN的方法
2018/03/05 Python
python psutil库安装教程
2018/03/19 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
世界上最好的足球商店:Unisport
2019/03/02 全球购物
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
商务英语专业毕业生自荐信
2013/11/05 职场文书
冰淇淋店创业计划书范文
2013/12/27 职场文书
五年级英语教学反思
2014/01/31 职场文书
教师党员公开承诺书
2014/03/25 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
环卫工作个人总结
2015/03/04 职场文书