本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持


寫爬蟲不是撈回來就行,還有一系列整理的功夫。

其中 PHP 使用 DOMDocument 也是比較好的解法! 這幾天再把爬回來的 HTML 片段資料做屬性置換時發生一些問題,又以下面這個問題最離奇!

一段 <p><img src="...">...</p>.... 結構的字串,一載入到 DOMDocument 方法後輸出就只剩第一張圖片結構。其他內容皆消失。

怎麼樣都沒有找到解決辦法後嘗試補上 <div>...</div> 標籤就沒事了,實在太詭異!

附上處理過程中寫的範例程式碼片段:

function img_url_encode($content = '') {
    $doc = new DOMDocument();
    $doc->loadHTML(mb_convert_encoding("<div>{$content}</div>", 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    $tags = $doc->getElementsByTagName('img');
    foreach ($tags as $tag) {
        $src = explode('/', $tag->getAttribute('src'));
        $new_src = array();
        for ($i = 0; $i < count($src); $i++) {
            if ($i == 0) {
                $new_src[] = $src[$i];
            } else {
                $new_src[] = urlencode($src[$i]);
            }
        }
        $tag->setAttribute('src', join('/', $new_src));
    }
    return mb_convert_encoding($doc->saveHTML(), 'UTF-8', 'HTML-ENTITIES');
}

用來將組合出的 IMG 標籤字串中,src 屬性值轉換為連結編碼避免載入圖片異常。


Share:

作者: Chun

WordPress 社群貢獻者、開源社群推廣者。專注於 WordPress 外掛開發、網站效能最佳化、伺服器管理,以及 iDempiere 開源 ERP 導入與客製開發。曾參與 WordCamp Taipei 等社群活動,GitHub Arctic Code Vault Contributor。提供資訊顧問、WordPress 開發教學、主機最佳化與企業 ERP 整合服務。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


文章
Filter
Apply Filters
Mastodon