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和ACCESS写聊天室(九)
Oct 09 PHP
第十二节--类的自动加载
Nov 16 PHP
php的一个登录的类 [推荐]
Mar 16 PHP
php设计模式 Factory(工厂模式)
Jun 26 PHP
ajax 的post方法实例(带循环)
Jul 04 PHP
php数组中删除元素的实现代码
Jun 22 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
PHP图片裁剪函数(保持图像不变形)
May 04 PHP
新浪SAE云平台下使用codeigniter的数据库配置
Jun 12 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP面向对象程序设计方法实例详解
Dec 24 PHP
laravel配置Redis多个库的实现方法
Apr 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
2011/11/07 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
用 JSON 处理缓存
2007/04/27 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
使用layui定义一个模块并使用的例子
2019/09/14 Javascript
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
python入门教程之识别验证码
2017/03/04 Python
Python数据结构之图的应用示例
2018/05/11 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
英国最大的在线运动补充剂商店:Discount Supplements
2017/06/03 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
预备党员政审材料
2014/02/04 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python