首页 > php开发 > PHP字符截取函数,兼容各类gbk,utf-8编码

PHP字符截取函数,兼容各类gbk,utf-8编码

在PHP中字符截取函数substr只能截取全英文才不会出现乱码如果里面有中文肯定是无法截取的,下面小编来给大家介绍两个兼容各类gbk,utf-8编码字符串截取函数

例1

<?php
function CsubStrPro($str, $start, $length, $charset = "utf-8", $suffix = false) {
    if (function_exists("mb_substr")) return mb_substr($str, $start, $length, $charset);
    $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
    $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
    $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
    $re['big5'] = "/[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 . "&hellip;";
    return $slice;
}
?>

例2

<?php
function subString_UTF8($str, $start, $lenth) {
    $len = strlen($str);
    $r = array();
    $n = 0;
    $m = 0;
    for ($i = 0; $i < $len; $i++) {
        $x = substr($str, $i, 1);
        $a = base_convert(ord($x) , 10, 2);
        $a = substr('00000000' . $a, -8);
        if ($n < $start) {
            if (substr($a, 0, 1) == 0) {
            } elseif (substr($a, 0, 3) == 110) {
                $i+= 1;
            } elseif (substr($a, 0, 4) == 1110) {
                $i+= 2;
            }
            $n++;
        } else {
            if (substr($a, 0, 1) == 0) {
                $r[] = substr($str, $i, 1);
            } elseif (substr($a, 0, 3) == 110) {
                $r[] = substr($str, $i, 2);
                $i+= 1;
            } elseif (substr($a, 0, 4) == 1110) {
                $r[] = substr($str, $i, 3);
                $i+= 2;
            } else {
                $r[] = '';
            }
            if (++$m >= $lenth) {
                break;
            }
        }
    }
    return $r;
} // End subString_UTF8;
} // End String
?>

#由于此函数返回的是一个数组,因此要配合join函数来显示字符串:

#join('',subString_UTF8($str, $start, $lenth));

#在页面显示的时候还可以在此语句后面连一个"..."


教程网址:http://www.phprm.com/develop/52673.html

欢迎收藏∩_∩但请保留本文链接。

标签:substr preg_match

相关文章

发表留言