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