我想href
在任何 html 源中找到所有包含我的 URL 的标签。
我使用了这段代码:
preg_match_all("'<a.*?href=\"(http[s]*://[^>\"]*?)\"[^>]*?>(.*?)</a>'si", $target_source, $matches);
例如,我尝试查找包含的 href 标签http://www.emrekadan.com
我该怎么做 ?
我想href
在任何 html 源中找到所有包含我的 URL 的标签。
我使用了这段代码:
preg_match_all("'<a.*?href=\"(http[s]*://[^>\"]*?)\"[^>]*?>(.*?)</a>'si", $target_source, $matches);
例如,我尝试查找包含的 href 标签http://www.emrekadan.com
我该怎么做 ?
DOM
为此,我只是使用 PHP 的Parser。这似乎比正则表达式更难,但实际上要容易得多,并且是解析 HTML的正确方法。
$url = 'WEBSITE_TO_SEARCH_FOR';
$searchstring = 'YOUR_SEARCH_STRING';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);
$result = array();
foreach($dom->getElementsByTagName('a') as $link) {
$href = $link->getAttribute('href');
if(stripos($href, $searchstring) !== FALSE) {
$result[] = $href;
}
}
if(!empty($result)) print_r($result);
解释:
loadHTMLfile()
使用方法加载给定的 URL<a>
标签并循环它们stripos()
不区分大小写地检查 href 是否包含给定的搜索词$result
数组注意:如果传递一个空字符串作为文件名或命名一个空文件,将生成一个警告。我曾经@
隐藏该消息,但通常认为这是一种不好的做法。在尝试加载 URL 之前,您可以添加其他检查以确保 URL 存在。