传递一个 HTML 文件,我必须搜索其中的所有链接,并且对于每个链接,我必须响应它是否是现有链接(作为 URL 验证器,但对于 HTML 文件)。我使用了 PHP 的函数“fsockopen()”,它告诉我 URL(在我的例子中是 HTML 链接)是否仍然存在。
我的问题如下:是否有一个 PHP 函数允许我搜索<a href="...">
我传递给它的每个 HTML 文件?并且只选择链接的字符(包含在标签的“”中的字符),所以我可以将它传递给 URL 验证器的变量?
您可以使用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.....
对于这类事情,使用 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 检查来自主机的链接)应该可以帮助您入门