기사 초록을 자동으로 생성합니다 [JavaScript 버전].
BLOG와 같은 프로그램을 작성할 때 기사의 이전 부분을 표시해야 하는 경우가 종종 있는데, 부적절한 잘림으로 인해 닫는 태그가 파괴되고 전체
문서 구조가 손상될까 두렵습니다. 덜 까다로운 애플리케이션에 사용하면 이 문제를 해결할 수 있습니다.
이 기능이 서버 측에 적용되는지, 클라이언트 측에 적용되는지는 모두가 고려해야 합니다. 이 기능은 실행하는 데 기계 집약적일 수 있으므로
보안 요구 사항이 높지 않은 경우 클라이언트에 배치할 수 있습니다.
해당 데이터베이스 쿼리도 최적화되도록 이 요약을 데이터 테이블의 별도 필드에 넣는 것이 가장 좋습니다. 많은 시간을 투자하는 대신 작은 공간을 희생하는 것은
좋은 거래입니다.
콘텐츠 보안을 중심으로 보안 문제에 대해 다시 이야기해 보겠습니다. 고객이 정상적인 요약 정보를 변경하려는 경우 일반적으로 블로그
소유자가 이러한 권한을 가지며 요약과 원본 텍스트 간의 일관성을 파괴하는 것은 자신의 책임입니다. 콘텐츠 이외의 보안은 서버측에서 해결할 수 있습니다. 따라서 이 기능은 클라이언트 측에서 사용하는 것이 좋습니다.
핵심코드:
최근 적용해봤는데 위 함수가 멀티바이트 문자셋을 잘 지원하지 않는 것을 발견해서 다시 작성했습니다.
문제가 발생하면 다음 기능을 사용해 보세요.
함수 Generate_Brief($text){
글로벌 $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 = 배열(); $posStack = 배열();
mb_ereg_search_init($Foremost, $re, 'i');
while($pos = mb_ereg_search_pos()){
$match = mb_ereg_search_getregs();
/* [자녀 매칭 공식]:
$matche[1] : 현재 "<...>"인지를 나타내는 "/" 문자 마찰은
닫는 부분
$matche[2] : 요소 이름입니다.
$matche[3] : 오른쪽 > '<...>' 마찰
*/
if($match[1]==""){
$Elem = $match[2];
if(mb_eregi($Single, $Elem) && $match[3] !=""){
계속;
}
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");
$Foremost를 반환합니다.
};欢迎大家找错误。谢谢。
以上就介绍了自动控对PHP教程有兴趣的朋友有所帮助。