1

传递一个 HTML 文件,我必须搜索其中的所有链接,并且对于每个链接,我必须响应它是否是现有链接(作为 URL 验证器,但对于 HTML 文件)。我使用了 PHP 的函数“fsockopen()”,它告诉我 URL(在我的例子中是 HTML 链接)是否仍然存在。

我的问题如下:是否有一个 PHP 函数允许我搜索<a href="...">我传递给它的每个 HTML 文件?并且只选择链接的字符(包含在标签的“”中的字符),所以我可以将它传递给 URL 验证器的变量?

4

2 回答 2

1

您可以使用DOMDocument很容易地做到这一点: -

$html = file_get_contents('http://www.telematica220998.altervista.org/listRicette.html');
$dom = new DOMDocument();
$dom->loadHTML($html);
$anchors = $dom->getElementsByTagName('a');
foreach($anchors as $anchor){
    var_dump($anchor->getAttribute('href'));
    //or whatever you want to do with them.
}

输出:-

string 'http://telematica220998.altervista.org/tortino_cioccolato_fond.html' (length=67)
string 'http://telematica220998.altervista.org/baci_di_dama.html' (length=56)
string 'http://telematica220998.altervista.org/biscotti_noci_e_nocciole.html' (length=68)
string 'http://telematica220998.altervista.org/krumiri.html' (length=51)
string 'http://telematica220998.altervista.org/torta_meringata_fragole.html' (length=67)
string 'http://telematica220998.altervista.org/torta_pere_cioccolato.html' (length=65)
string 'http://telematica220998.altervista.org/cestini_frutta.html' (length=58)
string 'http://telematica220998.altervista.org/semifreddo_caffe.html' (length=60)
string 'http://telematica220998.altervista.org/rose_del_deserto.html' (length=60)
string 'http://telematica220998.altervista.org/tiramisu.html' (length=52)
string 'http://www.telematica220998.altervista.org/index.html' (length=53)
string 'http://facebook.com/maria.poli.cr' (length=33)
string 'http://fotogrph.com/' (length=20)
string '#' (length=1)
string '#' (length=1)

ETC.....

于 2013-06-04T18:18:51.730 回答
0

对于这类事情,使用 wget 要容易得多

wget --spider --force-html -i page.html

你甚至可以用 PHP 运行它并解析输出

使用 PHP 它看起来像

$output = `wget --spider --force-html -i page.html`  

或者

$output = shell_exec("wget --spider --force-html -i page.html");

如果您只需要 php 查看使用 curl(使用php 检查来自主机的链接)应该可以帮助您入门

于 2013-06-04T17:54:35.687 回答