$html = '<div id="main_pr"><img src="https://example.com/image.jpg" alt="Demo"></div>';
$dom = new DOMDocument();
libxml_use_internal_errors(true); // 抑制 HTML5 解析警告
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXPath($dom);
// 查找 id="main_pr" 下的 img 標籤的 src 屬性
$nodes = $xpath->query('//*[@id="main_pr"]//img/@src');
if ($nodes->length > 0) {
$src = $nodes->item(0)->nodeValue;
echo "圖片地址:$src"; // 輸出:https://example.com/image.jpg
} else {
echo "未找到匹配圖片";
}
| 表達式 | 含義 |
|---|---|
//img/@src | 文檔中所有 img 的 src 屬性 |
//*[@id="main_pr"]//img/@src | id="main_pr" 元素內所有後代 img 的 src |
//div[@class="gallery"]/img/@src | class="gallery" 的 div 直接子元素 img 的 src |
//img[contains(@src, ".jpg")]/@src | src 包含 .jpg 的 img |
//img[1]/@src | 第一個 img 的 src(XPath 索引從 1 開始) |
$xpath->registerNamespace('x', 'https://www.w3.org/1999/xhtml') 並在查詢中使用 //x:img。loadHTML() 會自動補全 <html><body>,查詢路徑需包含或使用 // 任意層級匹配。mb_convert_encoding($html, 'HTML-ENTITIES', 'GBK') 再載入。loadHTMLFile() 流式加載,或使用 XMLReader(SAX 流式,內存常數)。@src 直接返回屬性節點,nodeValue 即屬性值;也可用 $imgNode->getAttribute('src')。推薦使用 Symfony DomCrawler 或 Masterminds/HTML5-PHP,支持熟悉的 CSS 選擇器語法:
use Symfony\Component\DomCrawler\Crawler;
$crawler = new Crawler($html);
$src = $crawler->filter('#main_pr img')->attr('src');