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
使用 eAccelerator加速PHP代码的目的
Mar 16 PHP
php 分页函数multi() discuz
Jun 21 PHP
PHP 柱状图实现代码
Dec 04 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
php生成rss类用法实例
Apr 14 PHP
php实现遍历多维数组的方法
Nov 25 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
ThinkPHP中调用PHPExcel的实现代码
Apr 08 PHP
php提供实现反射的方法和实例代码
Sep 17 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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 file_exists无效的解决办法
2013/06/26 PHP
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
JS操作数据库的实例代码
2013/10/17 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
node.js中的path.basename方法使用说明
2014/12/09 Javascript
JS通过ajax动态读取xml文件内容的方法
2015/03/24 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
2015/09/09 Javascript
jQuery实现图片加载完成后改变图片大小的方法
2016/03/29 Javascript
详解JavaScript中Hash Map映射结构的实现
2016/05/21 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
微信小程序 同步请求授权的详解
2017/08/04 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
python3.6数独问题的解决
2019/01/21 Python
Python列表切片常用操作实例解析
2020/03/10 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
文员岗位职责
2013/11/09 职场文书
无婚姻登记记录证明
2015/06/18 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
JavaScript实现简单拖拽效果
2021/09/15 Javascript