PHP - 获取第一个标签



这里有一个问题:

我想提取网站的标题。我已经看到了多个实现,但没有一个处理具有多个<title>标签的网站。所以目前我正在使用这样的东西来提取第一个(真实(标题:

function GetTitleFromWebSite($url)
{
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);  
$page = @file_get_contents($url, false, stream_context_create($arrContextOptions));
if ( $page )
{
$title_begin = strpos($page, "<title>");
if ( $title_begin )
{
$title_end = strpos( $page, "</title>" );
if ( $title_end )
{
$title_begin += 7;
$title = htmlentities( substr($page, $title_begin, $title_end - $title_begin) );
return $title;
}
}
}
return "";
}

我知道这不安全,但这仅用于测试,我稍后会担心认证。

问题是:

处理这个问题的最佳方法是什么?可以照顾每一个疯狂建筑的东西?一些实现在<title>中处理了新行。有什么"好"的方法可以做到这一点吗?

未经测试,并且基于您实际上可以从远程 url 捕获 html 的假设,那么也许以下内容可能会引导您找到解决方案

function GetTitleFromWebSite( $url ){
$opts=array(
'ssl'   =>  array(
'verify_peer'       =>  false,
'verify_peer_name'  =>  false,
),
);
$titles=array();
$page = @file_get_contents($url, false, stream_context_create($opts));
if ( $page ) {
libxml_use_internal_errors( true );
$dom=new DOMDocument;
$dom->validateOnParse=false;
$dom->standalone=true;
$dom->preserveWhiteSpace=true;
$dom->strictErrorChecking=false;
$dom->recover=true;
$dom->loadHTML( $page );
libxml_clear_errors();

$col=$dom->getElementsByTagName( 'title' );
if( $col->length > 0 ){
foreach( $col as $title ) $titles[]=$node->nodeValue;
}
return $titles;
}
return "";
}

最新更新