PHP100 2019-03-27
代码如下:
// PHP 4.3 or above needed define("BRIEF_LENGTH", 800); //Word amount of the Briefing of an Article function Generate_Brief($text){ global $Briefing_Length; if(strlen($text) <= BRIEF_LENGTH ) return $text; $Foremost = substr($text, 0, BRIEF_LENGTH); $re = "/<(\/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)/i"; $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT/i"; $Stack = array(); $posStack = array(); preg_match_all($re,$Foremost,$matches, PREG_SET_ORDER | PREG_OFFSET_CAPTURE); /* [Child-matching Specification]: $matches[$i][1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part $matches[$i][2] : Element Name. $matches[$i][3] : Right > of a "<...>" Friction */ for($i = 0 ; $i < count($matches); $i++){ if($matches[$i][1][0] == ""){ $Elem = $matches[$i][2][0]; if(preg_match($Single,$Elem) && $matches[$i][3][0] !=""){ continue; } array_push($Stack, strtoupper($matches[$i][2][0])); array_push($posStack, $matches[$i][2][1]); if($matches[$i][3][0] =="") break; }else{ $StackTop = $Stack[count($Stack)-1]; $End = strtoupper($matches[$i][2][0]); if(strcasecmp($StackTop,$End)==0){ array_pop($Stack); array_pop($posStack); if($matches[$i][3][0] ==""){ $Foremost = $Foremost.">"; } } } } $cutpos = array_shift($posStack) - 1; $Foremost = substr($Foremost,0,$cutpos); return $Foremost; };若遇到问题(发现上面的函数对多字节字符集支持得不好) 不烦试试下面的这个!
代码如下:
function Generate_Brief($text){ global $Briefing_Length; mb_regex_encoding("UTF-8"); if(mb_strlen($text) <= BRIEF_LENGTH ) return $text; $Foremost = mb_substr($text, 0, BRIEF_LENGTH); $re = "<(\/?)(P|DIV|H1|H2|H3|H4|H5|H6|ADDRESS|PRE|TABLE|TR|TD|TH|INPUT|SELECT|TEXTAREA|OBJECT|A|UL|OL|LI|BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|SPAN)[^>]*(>?)"; $Single = "/BASE|META|LINK|HR|BR|PARAM|IMG|AREA|INPUT|BR/i"; $Stack = array(); $posStack = array(); mb_ereg_search_init($Foremost, $re, 'i'); while($pos = mb_ereg_search_pos()){ $match = mb_ereg_search_getregs(); /* [Child-matching Formulation]: $matche[1] : A "/" charactor indicating whether current "<...>" Friction is Closing Part $matche[2] : Element Name. $matche[3] : Right > of a "<...>" Friction */ if($match[1]==""){ $Elem = $match[2]; if(mb_eregi($Single, $Elem) && $match[3] !=""){ continue; } array_push($Stack, mb_strtoupper($Elem)); array_push($posStack, $pos[0]); }else{ $StackTop = $Stack[count($Stack)-1]; $End = mb_strtoupper($match[2]); if(strcasecmp($StackTop,$End)==0){ array_pop($Stack); array_pop($posStack); if($match[3] ==""){ $Foremost = $Foremost.">"; } } } } $cutpos = array_shift($posStack) - 1; $Foremost = mb_substr($Foremost,0,$cutpos,"UTF-8"); return $Foremost; };
$file=fopen or die($str.'->远程网址读取失败!next='..'&action=check&domain='.$_GET['domain'].'">点击继续查询</a><br