• 技术文章 >后端开发 >php教程

    PHP 字符串编码截取函数(兼容utf-8和gb2312)_php实例

    2016-06-07 17:26:25原创336
    复制代码 代码如下:

    //截取字符串长度。支持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);
    }
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:PHP 截取字符串
    上一篇:php 购物车的例子_php实例 下一篇:配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境_php实例
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• 保藏PHP常用函数• 一下程序原本可以登录,为啥小弟我加了自动登录部分(前面1-15行),系统检测不到用户资料后不显示登录界面出来,请帮忙看看,谢谢了• 这个网站作为信息发布网站,效能是否完备• php 数据能够获取 但没法写入数据库 同一文件另一个表可能写入• 求正则表达式。婚配路径
    1/1

    PHP中文网