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 之 没有mysql支持时的替代方案
Oct 09 PHP
PHP 上传文件大小限制
Jul 05 PHP
php 遍历数据表数据并列表横向排列的代码
Sep 05 PHP
php Smarty模板生成html文档的方法
Apr 12 PHP
php 过滤器实现代码
Aug 09 PHP
检查php文件中是否含有bom的函数
May 31 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
php 防止表单重复提交两种实现方法
Nov 03 PHP
一键生成各种尺寸Icon的php脚本(实例)
Feb 08 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 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初学者最感迷茫的问题小结
2010/03/27 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
PHP实现带重试功能的curl连接示例
2016/07/28 PHP
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
防止文件缓存的js代码
2013/01/10 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
Spring mvc 接收json对象
2015/12/10 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
express框架下使用session的方法
2019/07/31 Javascript
vue项目中全局引入1个.scss文件的问题解决
2019/08/01 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
Python KMeans聚类问题分析
2018/02/23 Python
Django实现分页功能
2018/07/02 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python 异常的捕获、异常的传递与主动抛出异常操作示例
2019/09/23 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python读取图像矩阵文件并转换为向量实例
2020/06/18 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
美国专营婴幼儿用品的购物网站:buybuy BABY
2017/01/01 全球购物
软件测试工程师结构化面试题库
2016/11/23 面试题
治超工作实施方案
2014/05/04 职场文书
2014年工会工作总结
2014/11/12 职场文书
支行行长岗位职责
2015/02/15 职场文书
微观世界观后感
2015/06/10 职场文书
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python