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


操作網頁中修改 HTML 元素屬性的需求時,從單純字元取代到正規表達式(Regex)找字串取代到最後是使用 DOMDocument 方法來找元素操作都可以。

不過除了 DOMDocument 方法,其他方式都有機會把網頁 HTML 結構破壞掉,所以我大多都會採取 DOMDocument 方法來處理。

但! DOMDocument 至今還在預設 HTTP 協議中的預設字元 ISO-8859-1 編碼,所以如果使用這方法來分析頁面,除了英文內容之外的,都會有編碼亂碼問題。

預計 PHP8.4 的更新可以支援到 HTML5 PHP RFC: DOM HTML5 parsing and serialization

又,參考這一篇解法 PHP DOMDocument loadHTML not encoding UTF-8 correctly,只要在載入 HTML 字串前,補上 '<meta charset="utf8"/>' 這段就可以讓他去支援 UTF-8。

但! 其實我測試的頁面也有這段 UTF-8 的 head 標頭,也不知道為啥一定得要先這樣補上這段才可以完整的支援,搞得一個 head 中會出現兩個 <meta charset="UTF-8"/>。(utf8 vs UTF-8 的延伸謎之寫法問題暫時沒去測試了)

然後還有要儲存修改過後,並且輸出正確的 HTML 原始碼,使用 $dom->saveHTML($dom->documentElement); 這作法比直接 $dom->saveHTML() 這方法來的正確。

總結,這方法真的很雷,但卻又是最保險來處理 HTML 元素的方法,所以真是需要筆記起來XD

當然也可以去找一些 CSS Selector 方式操作的改寫函式庫來使用,哪怕也可能是使用 Regex 方式,但至少也測試的比較完整,就是需求真的很小又很少用的時候反而就太多了。


Share:

作者: Chun

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

發佈留言

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


文章
Filter
Apply Filters
Mastodon