PHP切割中文字符串函数

写了一个函数,可以用来切割中文字符串避免了因为切出了半个字符而出现乱码。

<?php
function cut_word ( $word , $count )
{
    $word_len = strlen ( $word );
   
    if ( $word_len < $count ){
   
        return $word;
   
    }else{
       
        $return = substr ( $word , 0 , $count-3 );
       
        if ( ord ( substr ( $return , -1 ) ) > 0x7f ){
           
            $return = substr ( $return , 0 , -1 ) . ".";
        }
       
        $return .= "...";
       
        return $return ;
       
    }
}
?>
anyShare分享到:
          

  1. #1 by admin on 2005年11月11日 - 13:11

    以上的function是针对于GB2312的汉字编码而言,对于UTF-8由于其编码比较复杂,它允许1-4个byte的编码。对于汉字采用了3个byte的编码。

    字节(bytes) 位(bits) 表 示
    1 7 0bbbbbbb
    2 11 110bbbbb 10bbbbbb
    3 16 1110bbbb 10bbbbbb 10bbbbbb
    4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
     
    function cut_word ( $word , $count  , $charset_bit = 3) //如果$charset_bit = 2 亦可处理GB2312
    {

        if ( strlen ( $word ) < $count ){
       
            return $word;
       
        }else{
           
            $return = substr ( $word , 0 , $count-3 );
           
            if( ord ( substr ( $return , -1 )) > 0x7f  ){
       
               while ( ord ( substr ( $return , -$charset_bit,1 )) < 0xc0  ||  ord ( substr ($return , -1)) < 0x7f ){   
                    $return = substr ( $return , 0 , -1 );
                    $point .= ".";
                }
               
                $return .= $point;
            }
           
               
            $return .= "…";
           
            return $return ;
           
        }
    }

  2. #2 by Doggie on 2009年01月12日 - 16:31

    感谢哦! 拿去用试试看~ 博主救了我的命~

(will not be published)
*