5

这个问题有很多答案,但没有一个完整的答案:

使用一个正则表达式,如何从中提取页面标题<title>Page title</title>

还有其他几种情况是如何键入标题标签的,例如:

<TITLE>Page title</TITLE>

<title>
 Page title</title>
<title>
 Page title
</title>

<title lang="en-US">Page title</title>

...或以上的任何组合。

它可以在自己的行上或在其他标签之间:

<head>
  <title>Page title</title>
</head>

<head><title>Page title</title></head>

提前感谢您的帮助。

UDPATE:所以,正则表达式方法可能不是最好的解决方案。哪个基于 PHP 的 HTML 解析器可以处理 HTML 格式良好(或不太好)的所有场景?

更新 2:sp00m 的正则表达式(https://stackoverflow.com/a/13510307/1844607)似乎在所有情况下都有效。如果需要,我会回到这个。

4

3 回答 3

10

请改用 HTML 解析器。但在以下情况下:

<title[^>]*>(.*?)</title>

演示

于 2012-11-22T10:10:47.257 回答
2

使用 DOMDocument 类:

$doc = new DOMDocument();
$doc->loadHTML($html);
$titles = $doc->getElementsByTagName("title");
echo $titles->item[0]->nodeValue;
于 2012-11-22T10:10:46.057 回答
0

使用这个正则表达式:

<title>[\s\S]*?</title>
于 2012-11-22T10:20:13.863 回答