static function blogSummary($str, $len = 100){
//$len = 100; // 摘要长度
$charSet = "utf-8"; // 字符集
$out = $tmp = '';
$right = array();
$reg = '/(.*)(<.+>)/siU';
$outLen = 0;
preg_match_all($reg, $str, $rs);
unset($rs[0]);
if( empty($rs[1]) ){
$out = mb_substr($str, 0, $len, $charSet);
$outLen = mb_strlen($out, $charSet);
}else{
foreach ($rs[1] as $key=>$val){
$valTmp = trim($val);
if( $valTmp ){
$tmpStr = $tmp.$valTmp;
if( mb_strlen($tmpStr, $charSet) > $len ){
$outLen += mb_strlen($valTmp, $charSet);
$diff = mb_strlen($tmpStr, $charSet) - $len;
$diff = mb_strlen($valTmp, $charSet) - $diff;
$valTmp = mb_substr($valTmp, 0, $diff, $charSet);
if( $valTmp ){
$valTmp = mb_substr($val, 0, mb_strpos($val, $valTmp, 0, $charSet), $charSet).$valTmp;
}
$out .= $valTmp;
break;
}
$tmp = $tmpStr;
$outLen += mb_strlen($valTmp, $charSet);
}
$out .= $val.$rs[2][$key];
$right[] = $rs[2][$key];
}
unset($rs);
$tags = strtolower(implode("", $right));
$rightTags = '';
$singleTag = array('img', 'br', 'hr', 'input', '/');
// 检查标签是否闭合
foreach ($right as $val){
$flag = false;
$val = strtolower($val);
// 检查标签是否是单标记
foreach ($singleTag as $sv){
if( strstr($val, $sv) ){
$flag = true;
break;
}
}
if( $flag ){
continue;
}
// 不是音标记时,检查是否已经闭合
$val = trim(substr($val, 0, -1));
$rightVal = '</'.substr($val, 1);
// 统计当前标记出现的次数 $val
$lc = substr_count($tags, $val);
$rc = substr_count($tags, $rightVal);
// 追加闭合标签
$rightTags = str_repeat($rightVal.'>', $lc-$rc).$rightTags;
}
unset($right);
$out .= $rightTags;
}
$return = array('summary'=>$out, 'len'=>$outLen);
//dump($return);exit;
return $return;
}
//$len = 100; // 摘要长度
$charSet = "utf-8"; // 字符集
$out = $tmp = '';
$right = array();
$reg = '/(.*)(<.+>)/siU';
$outLen = 0;
preg_match_all($reg, $str, $rs);
unset($rs[0]);
if( empty($rs[1]) ){
$out = mb_substr($str, 0, $len, $charSet);
$outLen = mb_strlen($out, $charSet);
}else{
foreach ($rs[1] as $key=>$val){
$valTmp = trim($val);
if( $valTmp ){
$tmpStr = $tmp.$valTmp;
if( mb_strlen($tmpStr, $charSet) > $len ){
$outLen += mb_strlen($valTmp, $charSet);
$diff = mb_strlen($tmpStr, $charSet) - $len;
$diff = mb_strlen($valTmp, $charSet) - $diff;
$valTmp = mb_substr($valTmp, 0, $diff, $charSet);
if( $valTmp ){
$valTmp = mb_substr($val, 0, mb_strpos($val, $valTmp, 0, $charSet), $charSet).$valTmp;
}
$out .= $valTmp;
break;
}
$tmp = $tmpStr;
$outLen += mb_strlen($valTmp, $charSet);
}
$out .= $val.$rs[2][$key];
$right[] = $rs[2][$key];
}
unset($rs);
$tags = strtolower(implode("", $right));
$rightTags = '';
$singleTag = array('img', 'br', 'hr', 'input', '/');
// 检查标签是否闭合
foreach ($right as $val){
$flag = false;
$val = strtolower($val);
// 检查标签是否是单标记
foreach ($singleTag as $sv){
if( strstr($val, $sv) ){
$flag = true;
break;
}
}
if( $flag ){
continue;
}
// 不是音标记时,检查是否已经闭合
$val = trim(substr($val, 0, -1));
$rightVal = '</'.substr($val, 1);
// 统计当前标记出现的次数 $val
$lc = substr_count($tags, $val);
$rc = substr_count($tags, $rightVal);
// 追加闭合标签
$rightTags = str_repeat($rightVal.'>', $lc-$rc).$rightTags;
}
unset($right);
$out .= $rightTags;
}
$return = array('summary'=>$out, 'len'=>$outLen);
//dump($return);exit;
return $return;
}