2012-04-29 6 views
-8

뉴스 스크립트를 작성 중이며 전체 텍스트 콘텐츠에서 텍스트를 거의 가져 오지 못하는 요약 함수를 만들고 싶습니다. 이 함수는 200 자의 전체 텍스트를 얻은 다음이 200 자의 마지막 공백을 검색합니다. 이 함수는 HTML 또는 기타 코드를 무시하고 전체 텍스트 내용의 처음 200 자만 표시해야합니다.PHP - 기사 요약

어떤 기능이 내 문제와 그 기능을 수행하는 데 가장 좋습니까?

+3

질문을 게시하기 전에 아무 것도 시도하지 않으셨습니까? – ilanco

+0

No는 어떤 기능이이 문제에 가장 적합한 지 모르므로 – user1257255

+4

작성해야합니다. –

답변

4

를 체크 아웃 CodeIgniter 프레임 워크에서이 도우미 함수 :

/** 
* Character Limiter 
* 
* Limits the string based on the character count. Preserves complete words 
* so the character count may not be exactly as specified. 
* 
* @access public 
* @param string 
* @param integer 
* @param string the end character. Usually an ellipsis 
* @return string 
*/ 

function character_limiter($str, $n = 500, $end_char = '…') 
{ 
    if (strlen($str) < $n) 
    { 
     return $str; 
    } 

    $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str)); 

    if (strlen($str) <= $n) 
    { 
     return $str; 
    } 

    $out = ""; 
    foreach (explode(' ', trim($str)) as $val) 
    { 
     $out .= $val.' '; 

     if (strlen($out) >= $n) 
     { 
      $out = trim($out); 
      return (strlen($out) == strlen($str)) ? $out : $out.$end_char; 
     } 
    } 
} 

당신은 기능을 사용할 수 있습니다 : 당신이 HTML 태그를 피하기 위해 필요한 경우

echo character_limiter($text, 200);

, 당신은 호출하기 전에 strip_tags 기능을 사용할 수 있습니다 character_limiter 기능.

3

가장 좋은 해결책은 편집기에서 수동으로 채워지는 데이터베이스의 지정된 "요약"필드 일 것입니다.

앞으로 많은 골칫거리를 줄일 수 있습니다.

+0

필자도이 필드를 가지고 있지만, 기사 작성자가 잊어 버렸거나 요약을 입력하고 싶지 않은 경우 이는 대체적입니다. – user1257255

0

이 작업을 수행 할 수있는 substr($string, $position, $length)이라는 간단한 기능이 있습니다.

내 티저 문자열의 길이가 지정된 최대 길이를 초과하지 않는지 확인하기 위해

$brief = substr($bigContent, 0, 200); //for 200 chars 
+0

단순한'substr'보다 조금 더 많은 로직이 필요하다고 생각합니다. 아이디어는 200 단어 길이에 맞는 마지막 단어 뒤에 텍스트를 끝내는 것입니다. 그렇지 않으면 단어의 중간에 기사가 끝날 수 있습니다. –

+0

@mazzucci, Oh .. 제발 복잡해지기 시작하지 마세요. 이미 혼자만의 정신없는 모듈을 코딩했습니다. : P – Starx

0

나는 다음과 같은 기능을 사용할처럼 사용하지만, 여전히 전체 단어를 유지합니다.

function teaser($input, $length = 200) 
{ 
    if(strlen($input) <= $length) 
    return $input; 

    $parts = explode(" ", $input); 

    while(strlen(implode(" ", $parts)) > $length) 
    array_pop($parts); 

    return implode(" ", $parts); 
} 

간단하고 간단합니다.

+0

그리고 단축 된 문자열의 끝에 "..."과 같은 것을 넣어야 할 필요성을 느낀다면 return 줄을'return implode ("", $ parts)와 같이 확장하면됩니다. "...", " – Repox