首页 >php教程 >php手册 >php:根据中文裁减字符串函数方法

php:根据中文裁减字符串函数方法

WBOY
WBOY原创
2016-06-13 10:20:011305浏览

define(CHARSET, 'UTF-8'); // 系统默认编码  

  

/** 

 * 根据中文裁减字符串 

 * @param $string - 字符串 

 * @param $length - 长度 

 * @param $doc - 缩略后缀 

 * @return 返回带省略号被裁减好的字符串 

 */  

function cutstr( $string, $length, $dot = '...' ) {  

    if ( strlen( $string )

        return $string;  

    }  

    $pre = chr( 1 );  

    $end = chr( 1 );  

    $string = str_replace( array( '&', '"', '' ), array( $pre . '&' . $end, $pre . '"' . $end, $pre . '' . $end ), $string );  

    $strcut = '';  

    if ( strtolower( CHARSET ) == 'utf-8' ) {  

        $n = $tn = $noc = 0;  

        while ( $n

            $t = ord( $string[$n] );  

            if ( $t == 9 || $t == 10 || (32

                $tn = 1;  

                $n++;  

                $noc++;  

            } elseif ( 194

                $tn = 2;  

                $n += 2;  

                $noc += 2;  

            } elseif ( 224

                $tn = 3;  

                $n += 3;  

                $noc += 2;  

            } elseif ( 240

                $tn = 4;  

                $n += 4;  

                $noc += 2;  

            } elseif ( 248

                $tn = 5;  

                $n += 5;  

                $noc += 2;  

            } elseif ( $t == 252 || $t == 253 ) {  

                $tn = 6;  

                $n += 6;  

                $noc += 2;  

            } else {  

                $n++;  

            }  

            if ( $noc >= $length ) {  

                break;  

            }  

        }  

        if ( $noc > $length ) {  

            $n -= $tn;  

        }  

        $strcut = substr( $string, 0, $n );  

    } else {  

        for ( $i = 0; $i

            $strcut .= ord( $string[$i] ) > 127 ? $string[$i] . $string[++$i] : $string[$i];  

        }  

    }  

    $strcut = str_replace( array( $pre . '&' . $end, $pre . '"' . $end, $pre . '' . $end ), array( '&', '"', '' ), $strcut );  

    $pos = strrpos( $strcut, chr( 1 ) );  

    if ( $pos !== false ) {  

        $strcut = substr( $strcut, 0, $pos );  

    }  

    return $strcut . $dot;  

}  

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn