带省略号的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