带省略号的PHP字符串截取函数

<?php
function PA_StringDeflate($strInfo, $nLenSet){
    //  带省略号的PHP字符串截取函数 by http://www.asm32.net/ 2006
    //  PASCAL asm32 GYL 2006-08-15 23:30:36 in FangZhuang, Beijing
    //  var $ii, $m_strResult, $m_strChar, $m_iCode, $m_bDeflated, $m_nLen
    $m_bDeflated = false;
    for($ii = 0; $ii<strlen($strInfo); $ii++) {
        $m_strChar = substr($strInfo, $ii, 1);
        $m_iCode=ord($m_strChar);
        if($m_iCode>=160){
            $ii++;
            $m_strChar=$m_strChar.substr($strInfo, $ii, 1);
        }
        if ($m_iCode<160) {
            $m_nLen = $m_nLen + 1;
        } else {
            $m_nLen = $m_nLen + 2;
        }
        if ( $m_nLen <= $nLenSet ) {
            if ( $m_nLen <= $nLenSet - 3 ) {
                $m_strResult = $m_strResult.$m_strChar;
            }
        } else {
            $m_bDeflated = true;
            break;
        }
    }
    if( $m_bDeflated ) {
        $m_strResult = "{$m_strResult}...";
    } else {
        $m_strResult = $strInfo;
    }
    return $m_strResult;
}

//  测试部分:开始
$strCrlf = "\r\n";
$strInfo = "PASCAL 独孤 高永亮 2006";
$A_nLength = Array(3, 5, 8, 11, 12, 13, 14, 19, 20, 21, 22, 23, 24, 25);
for( $ii = 0; $ii < count($A_nLength); $ii++){
    echo "{{$ii}:{$A_nLength[$ii]}} ".PA_StringDeflate($strInfo, $A_nLength[$ii])."<br>$strCrlf";
}
//  测试部分:结束
?>

 

执行结果:

{0:3} ...
{1:5} PA...
{2:8} PASCA...
{3:11} PASCAL ...
{4:12} PASCAL 独...
{5:13} PASCAL 独...
{6:14} PASCAL 独孤...
{7:19} PASCAL 独孤 高永...
{8:20} PASCAL 独孤 高永...
{9:21} PASCAL 独孤 高永亮...
{10:22} PASCAL 独孤 高永亮 ...
{11:23} PASCAL 独孤 高永亮 2006
{12:24} PASCAL 独孤 高永亮 2006
{13:25} PASCAL 独孤 高永亮 2006

posted @ 2012-04-27 15:19  jia58960  阅读(777)  评论(0编辑  收藏  举报