首页 > php教程 > php手册 > 正文

php实现中文字串截取无乱码的方法

WBOY
发布: 2016-05-25 16:44:46
原创
1192 人浏览过

有不少php初学者截取字符都会使用substr()函数或者mb_substr()函数来截取了,第一个中文肯定乱码了,第二个性能不好,下面我总结了几个自定的中文字串截取无乱码实例.

例1代码如下:

<?php function msubstr($str, $start = 0, $length, $charset = "utf-8", $suffix = true) {
    if (function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset);
    elseif (function_exists(&#39;iconv_substr&#39;)) {
        return iconv_substr($str, $start, $length, $charset);
    }
    $re[&#39;utf-8&#39;] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
    $re[&#39;gb2312&#39;] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
    $re[&#39;gbk&#39;] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
    $re[&#39;big5&#39;] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
    preg_match_all($re[$charset], $str, $match);
    $slice = join("", array_slice($match[0], $start, $length));
    if ($suffix) return $slice . "…";
    return $slice;
}
?>
登录后复制

例2代码如下: 

<?php
//$start:指定开始截取字符串的位置;$length指定截取字符的长度
function substr2($string, $start, $length) {
    $len = strlen($string);
    if ($len > $length) {
        $str = &#39;&#39;;
        $len1 = $start + $length; //截取到原字符串的位置
        for ($i = $start; $i < $len1; $i++) {
            if (ord(substr($string, $i, 2)) > 0xa0) //在ASCII中,0xa0表示汉字的开始
            {
                $str.= substr($string, $i, 2);
                $i++;
            } else {
                $str.= substr($string, $i, 1);
            }
        }
        return $str . &#39;...&#39;;
    } else {
        return $string;
    }
}
?>
	
登录后复制

例3代码如下:

<?php
function chinesesubstr($str, $start, $len) {
    $strlen = $start + $len;
    for ($i = 0; $i < $strlen; $i++) {
        if (ord(substr($str, $i, 1)) > 0xa0) {
            $tmpstr.= substr($str, $i, 2);
            $i++;
        } else {
            $tmpstr.= substr($str, $i, 1);
        }
    }
    return $tmpstr;
}
$str = "waiting for you 等wait你back";
echo chinesesubstr($str, 0, 19)
?>
登录后复制

               
               

本文地址:

转载随意,但请附上文章地址:-)

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!