Automatically generate article abstracts [JavaScript version].
When we write programs like BLOG, we often need to display the previous part of the article, but we are afraid that improper truncation will destroy the closing tag and cause damage to the entire
document structure. Using my function can be used in less demanding applications. solve this problem.
You should consider whether this function is applied on the server side or on the client side. Because I think this function may be more machine-intensive to run,
so it can be placed on the client if security requirements are not high.
It is best to put this summary in a separate field in the data table, so that the corresponding database query is also optimized. It's
a good deal to sacrifice a little space in exchange for a lot of time.
Let’s talk about security issues again, mainly content security. If the client intends to change the normal summary information, generally the owner of the BLOG
has this power, and it is his own business to destroy the consistency between the summary and the original text. Security other than content can be solved on the server side. Therefore, it is recommended to use this function on the client side.
Core code:
I recently applied it and found that the above function does not support multi-byte character sets well, so I rewrote it.
If you encounter problems, you might as well try the following function.
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;
};欢迎大家找错误。谢谢。