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 相关文章推荐
dedecms中常见问题修改方法总结
Mar 21 PHP
php 动态添加记录
Mar 10 PHP
php cookie 登录验证示例代码
Mar 16 PHP
PHP5.3.1 不再支持ISAPI
Jan 08 PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
Jun 20 PHP
php生成短网址示例
May 05 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
Laravel模型间关系设置分表的方法示例
Apr 21 PHP
php创建类并调用的实例方法
Sep 25 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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
用Simple Excel导出xls实现方法
2012/12/06 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
javascript 页面只自动刷新一次
2009/07/10 Javascript
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
PHP+MySQL+jQuery随意拖动层并即时保存拖动位置实例讲解
2015/10/09 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
jQuery新窗口打开外链接
2016/07/21 Javascript
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue-cli3 项目从搭建优化到docker部署的方法
2019/01/28 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
详解vue高级特性
2020/06/09 Javascript
Python XML RPC服务器端和客户端实例
2014/11/22 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python 实现的车牌识别项目
2021/01/25 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
俄罗斯金苹果网上化妆品和香水商店:Goldapple
2019/12/01 全球购物
医学专业应届生的自我评价
2014/02/28 职场文书
细节决定成败演讲稿
2014/05/12 职场文书
2014年党员加强作风建设思想汇报
2014/09/15 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
银行保安拾金不昧表扬稿
2015/05/05 职场文书
出生证明范本
2015/06/15 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
销区经理年终述职报告模板
2019/11/28 职场文书