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 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
php 过滤器实现代码
Aug 09 PHP
php数字游戏 计算24算法
Jun 10 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
解析PHP实现下载文件的两种方法
Jul 05 PHP
phpstrom使用xdebug配置方法
Dec 17 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
Mar 17 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
php截取视频指定帧为图片
May 16 PHP
让你的PHP7更快之Hugepage用法分析
May 31 PHP
Laravel5.7框架安装与使用学习笔记图文详解
Apr 02 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的FTP学习(二)[转自奥索]
2006/10/09 PHP
设置iframe的document.designMode后仅Firefox中其body.innerHTML为br
2012/02/27 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
12款经典的白富美型—jquery图片轮播插件—前端开发必备
2013/01/08 Javascript
Google Map V3 绑定气泡窗口(infowindow)Dom事件实现代码
2013/04/26 Javascript
浅析js封装和作用域
2013/07/09 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
使用AOP改善javascript代码
2015/05/01 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
Node.js静态服务器的实现方法
2018/02/28 Javascript
Vue触发式全局组件构建的方法
2018/11/28 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
bootstrap Table实现合并相同行
2019/07/19 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
[04:53]DOTA2英雄基础教程 祈求者
2014/01/03 DOTA
python对配置文件.ini进行增删改查操作的方法示例
2017/07/28 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
python 提取文件指定列的方法示例
2019/08/07 Python
python urllib爬虫模块使用解析
2019/09/05 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
anaconda安装pytorch1.7.1和torchvision0.8.2的方法(亲测可用)
2021/02/01 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
项目合作协议书
2014/04/16 职场文书
安全协议书范本
2014/04/21 职场文书
辞职信的写法
2015/02/27 职场文书
总经理助理岗位职责范本
2015/03/31 职场文书
单位综合评价意见
2015/06/05 职场文书
教师节感想
2015/08/11 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python