我需要獲取用HTML編寫的新聞項目的簡短摘錄以顯示在我的首頁上。很明顯,我不能使用像substr
這樣簡單的東西,因爲它可能會使標籤不封閉甚至留下一半標籤。從PHP中獲取摘錄來自HTML
,哪一樣容易:
- 的HTML轉換爲體面尋找純文本,並拿出一張該
- 從HTML以開始和截止關閉所有未關閉的標籤(將這個總是看好吧?)
我將如何去執行選擇的解決方案?
我需要獲取用HTML編寫的新聞項目的簡短摘錄以顯示在我的首頁上。很明顯,我不能使用像substr
這樣簡單的東西,因爲它可能會使標籤不封閉甚至留下一半標籤。從PHP中獲取摘錄來自HTML
,哪一樣容易:
我將如何去執行選擇的解決方案?
最簡單的方法是在截斷它之前使用strip_tags()
從項目文本中去除所有HTML。
現在將其用於自動生成的摘錄。這不是最好的,但沒關係,因爲我爲新聞海報提供了特殊標記以指定他們自己的摘錄。 – 2009-11-21 01:30:49
如果重要的是保留原始新聞項目的HTML結構,我會採取第二種選擇。
一個簡單的方法來實現這將是通過Tidy運行你的片段關閉任何未封閉的標籤。具體請參閱tidy::cleanRepair方法。
您可以嘗試將數據解析爲XML,然後僅截斷「純」文本節點。
注意:此解決方案強制輸入爲有效的XML並始終處於大致相同的結構中。
你好我猜你在找什麼叫網站抓取。 這裏是你如何刮網站; 使用庫PHP簡單的HTML 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);
在這種情況下不使用此功能,但有幫助。 – 2009-11-21 01:31:23
此摘錄下來第一款不割字和附加可選的蹤跡。
$摘錄自= :: 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;
}
//
第三種方法是解析HTML,對於[例如用DOM文檔它接受標籤的護理](HTTP:// stackoverflow.com/a/29323396/367456)。 – hakre 2015-03-28 23:02:29