首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP DOMXPath 精準提取圖片 src 屬性值

     編輯:PHP 綜合知識

核心代碼

$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 "未找到匹配圖片";
}

XPath 表達式詳解

表達式含義
//img/@src文檔中所有 img 的 src 屬性
//*[@id="main_pr"]//img/@srcid="main_pr" 元素內所有後代 img 的 src
//div[@class="gallery"]/img/@srcclass="gallery" 的 div 直接子元素 img 的 src
//img[contains(@src, ".jpg")]/@srcsrc 包含 .jpg 的 img
//img[1]/@src第一個 img 的 src(XPath 索引從 1 開始)

常見問題與最佳實踐

  1. 命名空間:XHTML/SVG 可能有默認命名空間,需註冊 $xpath->registerNamespace('x', 'https://www.w3.org/1999/xhtml') 並在查詢中使用 //x:img。
  2. HTML 片段解析:loadHTML() 會自動補全 <html><body>,查詢路徑需包含或使用 // 任意層級匹配。
  3. 編碼處理:輸入為非 UTF-8 時,先 mb_convert_encoding($html, 'HTML-ENTITIES', 'GBK') 再載入。
  4. 性能:大文檔優先用 loadHTMLFile() 流式加載,或使用 XMLReader(SAX 流式,內存常數)。
  5. 屬性值獲取:@src 直接返回屬性節點,nodeValue 即屬性值;也可用 $imgNode->getAttribute('src')。

現代替代:CSS 選擇器

推薦使用 Symfony DomCrawler 或 Masterminds/HTML5-PHP,支持熟悉的 CSS 選擇器語法:

use Symfony\Component\DomCrawler\Crawler;
$crawler = new Crawler($html);
$src = $crawler->filter('#main_pr img')->attr('src');
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved