我需要获取用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