2009-11-20 6 views
3

HTML로 작성된 뉴스 항목을 짧은 페이지에서 볼 수 있어야합니다. 확실히 substr과 같은 단순한 태그를 사용할 수 없기 때문에 태그가 닫혀 있지 않거나 태그 절반이 남을 수 있습니다. 이다PHP에서 HTML의 발췌 부분 얻기

쉽게 :

  • 일반 텍스트를보고하고 HTML에서 시작을 복용하는
  • 의 조각을 (이 항상 볼 것이다 컷오프에서 어떤 닫히지 않은 태그를 닫는 괜찮은로 HTML 변환 OK?)

선택한 솔루션을 구현하려면 어떻게해야합니까?

+0

세 번째 방법은 (HTTP를 [태그를 돌봐있는 DOMDocument와 예]를 들어, HTML을 구문 분석하는 것입니다 : // www.overflow.com/a/29323396/367456). – hakre

답변

6

가장 간단한 방법은 자르기 전에 항목 텍스트에서 모든 HTML을 strip_tags()으로 제거하는 것입니다.

+0

자동 생성 된 발췌문에 이것을 사용하십시오. 그것은 최고가 아니지만, 뉴스 포스터에 자신의 발췌 부분을 나타내는 특별한 마크 업을 제공 한 이후로는 괜찮습니다. –

3

원래 뉴스 항목의 HTML 구조를 유지하는 것이 중요한 경우 두 번째 옵션을 사용합니다.

간단히 구현하려면 Tidy을 통해 조각을 실행하여 닫히지 않은 태그를 닫는 것입니다. 특히 tidy::cleanRepair 방법을 참조하십시오.

1

데이터를 XML로 구문 분석 한 다음 "순수한"텍스트 노드 만자를 수 있습니다.

참고 :이 솔루션은 입력을 유효한 XML로하고 항상 동일한 구조로 유지해야합니다.

2

안녕하세요 당신이 찾고있는 것이 웹 사이트 스크래핑이라고합니다. 다음은 웹 사이트를 긁을 수있는 방법입니다. 는 DOM 파서 여기 PHP Simple HTML DOM Parser

를 다운로드 그리고 마지막으로 여기에 당신이 절단 말없이 슬래시닷 (Slashdot)

// Create DOM from URL 
$html = file_get_html('http://slashdot.org/'); 

// Find all article blocks 
foreach($html->find('div.article') as $article) { 
    $item['title'] = $article->find('div.title', 0)->plaintext; 
    $item['intro'] = $article->find('div.intro', 0)->plaintext; 
    $item['details'] = $article->find('div.details', 0)->plaintext; 
    $articles[] = $item; 
} 

print_r($articles); 
+0

이 상황에서는 이것을 사용하지 않지만 그럼에도 불구하고 도움이됩니다. –

0

이 발췌 첫 번째 단락 아래로 긁어 및 옵션 흔적을 추가 할 수있는 방법 코드가 라이브러리 PHP 간단한 HTML을 사용합니다.

$ 발췌 = 자기 :: excerpt_paragraph ($ html로, 180)

/** 
* excerpt first paragraph from html content 
* 
**/ 
public static function excerpt_paragraph($html, $max_char = 100, $trail='...') 
{ 
    // temp var to capture the p tag(s) 
    $matches= array(); 
    if (preg_match('/<p>[^>]+<\/p>/', $html, $matches)) 
    { 
     // found <p></p> 
     $p = strip_tags($matches[0]); 
    } else { 
     $p = strip_tags($html); 
    } 
    //shorten without cutting words 
    $p = self::short_str($p, $max_char); 

    // remove trailing comma, full stop, colon, semicolon, 'a', 'A', space 
    $p = rtrim($p, ',.;: aA'); 

    // return nothing if just spaces or too short 
    if (ctype_space($p) || $p=='' || strlen($p)<10) { return ''; } 

    return '<p>'.$p.$trail.'</p>'; 
} 
// 

/** 
* shorten string but not cut words 
* 
**/ 
public static function short_str($str, $len, $cut = false) 
{ 
    if (strlen($str) <= $len) { return $str; } 
    $string = ($cut ? substr($str, 0, $len) : substr($str, 0, strrpos(substr($str, 0, $len), ' '))); 
    return $string; 
} 
// 
관련 문제