get_meta_tags 函数的基本语法如下:
array get_meta_tags ( string $filename )
该函数接受一个文件路径(或者 URL),并解析该文件中的所有 标签。返回的结果是一个关联数组,其中数组的键是 meta 标签的 name 或 property 属性,值则是相应的 content 属性。
例如,考虑如下的 HTML 示例:
<html>
<head>
<meta name="description" content="这是一个测试网页">
<meta name="keywords" content="PHP, HTML, meta">
<meta property="og:title" content="Open Graph Title">
</head>
<body>
<!-- 页面内容 -->
</body>
</html>
使用 get_meta_tags 解析这个 HTML 文件后,返回的数组将是:
array(
'description' => '这是一个测试网页',
'keywords' => 'PHP, HTML, meta',
'og:title' => 'Open Graph Title'
)
get_meta_tags 函数解析时,只关注 name 和 property 属性,并忽略 http-equiv 属性的标签。如果你的 HTML 中有 ,该标签将不会被 get_meta_tags 解析。
如果需要解析 http-equiv 属性的标签,可以考虑使用更强大的 HTML 解析器,如 DOMDocument,来获取所有的 标签及其内容。
$doc = new DOMDocument();
@$doc->loadHTMLFile('yourfile.html');
$metas = $doc->getElementsByTagName('meta');
foreach ($metas as $meta) {
$name = $meta->getAttribute('name');
$content = $meta->getAttribute('content');
echo "$name: $content\n";
}
这种方法能解析包括 http-equiv 在内的所有 标签。
当传入的是 URL 时,get_meta_tags 函数有时无法正确解析某些字符编码(例如,UTF-8 或 GB2312)。如果 HTML 文件的编码与 PHP 的默认编码不匹配,可能会导致解析错误。
你可以首先通过 mb_convert_encoding 函数将 HTML 内容转换为正确的字符编码,然后再调用 get_meta_tags:
$html = file_get_contents('yourfile.html');
$html = mb_convert_encoding($html, 'UTF-8', 'auto');
file_put_contents('tempfile.html', $html);
$metaTags = get_meta_tags('tempfile.html');
print_r($metaTags);
通过这种方式,可以确保 HTML 内容在解析时使用正确的编码。
有些网页的 标签是通过 JavaScript 动态加载的。get_meta_tags 函数无法解析这些动态内容,因为它只是读取 HTML 文件的静态内容,不会执行 JavaScript。
对于动态生成的 HTML 内容,建议使用浏览器自动化工具(如 Selenium 或 Puppeteer)来模拟浏览器行为,并获取最终渲染后的 HTML。这时,可以将渲染后的 HTML 提取出来,再使用 get_meta_tags 进行解析。
在 HTML 中,标签和属性名是大小写不敏感的。然而,get_meta_tags 函数返回的数组中,键通常是小写的。如果你的 HTML 中使用了大写字母,如 ,get_meta_tags 仍然会将其解析为 description(小写)。
如果需要对返回的 meta 标签进行大小写敏感的处理,可以手动转换为统一格式,或直接在解析后的数据中进行必要的处理。
$metaTags = get_meta_tags('yourfile.html');
$metaTags = array_change_key_case($metaTags, CASE_LOWER);
如果传入的文件路径错误,或者文件本身没有 标签,get_meta_tags 会返回空数组。此时,可能是因为 HTML 文件格式不规范,或者文件路径不可访问。
确保文件路径正确,并且 HTML 文件符合标准。如果问题依然存在,可以检查文件是否包含正确的 UTF-8 编码声明,或者使用错误处理来捕获和调试问题。
$html = file_get_contents('yourfile.html');
if ($html === false) {
die('无法读取文件');
}
$metaTags = get_meta_tags('yourfile.html');
if (empty($metaTags)) {
echo "没有找到 meta 标签。\n";
}
相关标签:
HTML