Home > Backend Development > PHP Tutorial > php怎样限制字符的显示长度?

php怎样限制字符的显示长度?

WBOY
Release: 2016-06-06 20:35:39
Original
2516 people have browsed it

php怎样限制字符的显示长度?

像上面这样(截取贴吧的),当字符长度超过固定的像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占的宽度不一样,不能根据字符数来确定,不知道该怎么实现?

回复内容:

php怎样限制字符的显示长度?

像上面这样(截取贴吧的),当字符长度超过固定的像素宽度时,截取像素宽度范围内的字符串,并在字符串后加省略号。mb_strlen函数只能获取字符数,而英文和中文一个字符所占的宽度不一样,不能根据字符数来确定,不知道该怎么实现?

那个可以通过 CSS 来控制的… http://jsfiddle.net/sc7uk5bw/

<code>//截取字符串
function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true){
    if(function_exists("mb_substr")){
        if($suffix){
            return mb_substr($str, $start, $length, $charset);
        }else{
            return mb_substr($str, $start, $length, $charset);
        }
    }elseif(function_exists('iconv_substr')) {
        if($suffix){
            return iconv_substr($str,$start,$length,$charset);
        }else{
            return iconv_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;
    }else{
        return $slice;
    }

}
</code>
Copy after login

给一个我平时用来截取字符串的方法吧,支持中英文

<code>php</code><code>// 截取字符串
public static function mix_substr($str, $len = 12, $dot = true) {
    $i = 0;
    $l = 0;
    $c = 0;
    $a = array();
    while ($l = 224) {
            $c = 3;
            $t = substr($str, $i, $c);
            $l += 2;
        } elseif (ord($t) >= 192) {
            $c = 2;
            $t = substr($str, $i, $c);
            $l += 2;
        } else {
            $c = 1;
            $l++;
        }
        // $t = substr($str, $i, $c);
        $i += $c;
        if ($l > $len) break;
        $a[] = $t;
    }
    $re = implode('', $a);
    if (substr($str, $i, 1) !== false) {
        array_pop($a);
        ($c == 1) and array_pop($a);
        $re = implode('', $a);
        $dot and $re .= '...';
    }
    return $re;
}
</code>
Copy after login
Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template