php 截取指定长度中文字符

     在PHP程序开发中,经常会执行字符串的截取操作,比如输出信息列表时,标题不宜过长,打印文章摘要时,也要执行一系列的字符串截取操作。遇到这些需求时,我们经常会想到使用substr()方法来实现。
    但字符串只要出现中文字符,就有可能导致PHP substr 中文乱码,因为中文UTF-8编码,每个汉字占3字节,而GB2312占2字节,英文占1字节,截取位数不准确,substr()硬生生地将一个中文字符“锯”成两半,造成断开的字符会把其后的..拉过来一起做一个字,所以出现了PHP substr中文乱码。下面说一下我的解决办法: 
    使用mb_stren()函数: 
     mixed mb_strlen ( string $str[, string $encoding = mb_internal_encoding() ] )
    第一个参数为要处理的的字符串  第二个参数为编码方式  忽略则使用默认编码
    根据此函数来截取中文字符串,自定义函数为:
    /**
    * @param string $string 要截取的字符串
    * @param int $len 要截取的长度
    * @param string $tail 截取后结尾替换的字符换
    * @return string $string 返回截取后的字符串
    */
    function changeStr($string,$len,$tail){
        if(mb_strlen($string)>$len){
            $tmp = mb_substr($string,0,$len,'utf8');
            return $tmp.$tail;
        }else{
            return $arg;
        }
    }
    测试:
<?php
    header('Content-type:text/html;charset=utf8');

    $string = "大众创业、万众创新成为全社会的共识。开展股权众筹融资试点”被正式写入政府工作报告,
    即将修订的《证券法》也将赋予股权众筹一个法律地位。当今的中国是创业的热土,也是股权众筹最适宜生
    长的土壤,支持一大批创新创业公司因“众筹”而成功是众筹行业的历史使命。中关村作为新经济的风向标和
    策源地,率先诞生了中国最有影响力的一批股权众筹平台,推动股权众筹行业健康发展,为“大众创业、万众
    创新”营造良好发展环境成为中关村的历史使命和必然选择。";
    
    echo changeStr($string,10,'.....'); 


    /**
    * @param string $string 要截取的字符串
    * @param int $len 要截取的长度
    * @param string $tail 截取后结尾替换的字符换
    * @return string $string 返回截取后的字符串
    */
    function changeStr($string,$len,$tail){
        if(mb_strlen($string)>$len){
            $tmp = mb_substr($string,0,$len,'utf8');
            return $tmp.$tail;
        }else{
            return $arg;
        }
    }

?>
    输出:
    大众创业、万众创新.....


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值