我正在尝试使用PHP脚本将一些网页保存为文本文件。
如何使用PHP将网页加载到文件缓冲区并删除HTML标记?
发布于 2010-02-14 05:18:22
简单的方式:使用 library
fopen("http://google.com/", "r")http_get() http file_get_contents()发送一个HTTP请求:通过调用外部工具,如d21或d22不过,这些都不能保证在您的服务器上可用。
发布于 2010-02-14 10:30:01
一种方法:
$url = "http://www.brothersoft.com/publisher/xtracomponents.html";
$page = file_get_contents($url);
$outfile = "xtracomponents.html";
file_put_contents($outfile, $page);上面的代码只是一个示例,没有任何(!)错误检查和处理。
发布于 2010-02-14 11:04:37
正如其他答案所说,无论是标准PHP流函数还是cURL都是检索HTML的最佳选择。至于删除标签,这里有几种方法:
Tidy选项#1:使用Tidy扩展(如果在服务器上可用)递归地遍历文档树并从节点返回文本。如下所示:
function textFromHtml(TidyNode $node) {
if ($node->isText()) {
return $node->value;
} else if ($node->hasChildren()) {
$childText = '';
foreach ($node->child as $child)
$childText .= textFromHtml($child);
return $childText;
}
return '';
}你可能想要更复杂的东西,例如,用换行符替换<br />标签(其中的$node->name == 'br'),但这可以作为一个开始。
然后,将HTML的文本加载到Tidy对象中,并在body节点上调用您的函数。如果内容在字符串中,请使用:
$tidy = new tidy();
$tidy->parseString($contents);
$text = textFromHtml($tidy->body());选项#2:使用正则表达式剥离<和>之间的所有内容。您可以(也许应该)开发一个更复杂的正则表达式,例如,它只匹配有效的HTML开始或结束标记。页面的同步线中的任何错误,如正文中的错位尖括号,如果您不小心,都可能意味着垃圾输出。这就是为什么Tidy如此优秀(它是专门为清理坏页面而设计的),但它可能不可用。
https://stackoverflow.com/questions/2259892
复制相似问题