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生成静态html文件的三种方法
Jun 18 PHP
php常用Output和ptions/Info函数集介绍
Jun 19 PHP
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
Jul 03 PHP
PHP时间格式控制符对照表分享
Jul 23 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
Dec 20 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
php实现压缩合并js的方法【附demo源码下载】
Sep 22 PHP
thinkPHP简单调用函数与类库的方法
Mar 15 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 PHP
PHP中单例模式的使用场景与使用方法讲解
Mar 18 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 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程序--记数器
2006/10/09 PHP
phpMyAdmin出现无法载入 mcrypt 扩展,请检查PHP配置的解决方法
2012/03/26 PHP
yii2.0整合阿里云oss删除单个文件的方法
2017/09/19 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
Javascript小技巧之生成html元素
2014/05/15 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
2016/05/12 Javascript
js将json格式的对象拼接成复杂的url参数方法
2016/05/25 Javascript
深入研究React中setState源码
2017/11/17 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
微信小程序前端自定义分享的实现方法
2019/06/13 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
Python中if elif else及缩进的使用简述
2018/05/31 Python
python实现输入数字的连续加减方法
2018/06/22 Python
python3 flask实现文件上传功能
2020/03/20 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
python 中的命名空间,你真的了解吗?
2020/08/19 Python
Python实现疫情地图可视化
2021/02/05 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
计算机网络专业自荐信
2014/07/04 职场文书
售房委托书
2014/08/30 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
学习十八大演讲稿
2014/09/15 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
四十九个javascript小知识实用技巧
2021/11/20 Javascript