| 网站镜像:电信 网通 | 加入收藏 | 设为首页

会自动补充的字串截取函数

  • 会自动补充的字串截取函数


    当截取句子时,可能会断在一个单词的中间,如beincity一词被断在了当中,这样有时会不妥,下面这个函数就是用来解决这个问题的,当bDelete=TRUE时,就删除那个被截断的单词(因为我觉得把它删掉比把它补充完整要来得方便)。当然,这个函数支持对中文的操作,当双字节字符被截断时,会自动补充完整。

    <?
    function wordscut($string, $length, $bDelete=FALSE)
    {
    if(strlen($string) > $length) {
    for($i = 0; $i < $length - 3; $i++) {
    if(ord($string[$i]) > 127) {
    $wordscut .= $string[$i].$string[$i + 1];
    $i++;
    } else {
    $wordscut .= $string[$i];
    }
    }
    ///add
    if( $i == $length-3 ) {
    if( $bDelete ) {
    if(ereg("[0-9a-zA-Z_\.\-]", $string[$i])) {
    for($j=$i-1; $j>=0; $j--)
    if(!ereg("[0-9a-zA-Z_\.\-]", $string[$j])) break;
    $wordscut = substr($wordscut, 0, strlen($wordscut)-($i-$j)+1);
    }
    }
    }
    ///
    return $wordscut.' ...';
    }
    return $string;
    }
    echo wordscut("Hello,小坚.beincity!", 18, true);
    echo "<br>";
    echo wordscut("123 567 90abcde", 6+3, true);

    ?>

    <?//another

    function SubstrGB($in, $num, $delete=FALSE)
    file://usage: $short = SubstrGB($yourText, $num, $delete?)
    {
    $pos=0;
    $out="";
    while($c = substr($in, $pos, 1)) {
    if(ord($c) > 127) {
    $out .= $c;
    $pos++;
    $c = substr($in, $pos, 1);
    $out .= $c;
    } else {
    $out .= $c;
    }
    $pos++;
    if($pos >= $num) break;
    }
    if($pos == $num) {
    if( $delete ) {
    if(ereg("[0-9a-zA-Z_\.\-]", substr($in, $pos, 1))) {
    for($j = $pos-1; $j >= 0; $j--)
    if(!ereg("[0-9a-zA-Z_\.\-]", substr($out, $j, 1)))
    break;
    $out = substr($out, 0, strlen($out)-($pos-$j)+1);
    }
    }
    }
    return $out;
    }

    ?>

    责任编辑: microrain