[PHP] 使用正規表示法(RegEx)解析 HTML 文件時,移除特殊字元的陷阱

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


這幾天都在用 NodeJS 寫爬蟲去測試解析資料,然後昨天要改用 PHP 實作的時候就發生一個詭異問題:

抽出來的文件是正常,但一經過移除斷行的解析時,整個文件編碼就走山了!


preg_replace('/s+/', ' ', $content);

怎麼想都是 preg_replace 這方法幫我加減料,後來才查到原因: Does preg_replace() change my character set?

因為 UTF8 編碼下的文字中常會帶有 0xa0 這個與「非斷行空白」一樣的使用,所以在 PCRE 模式下去做替換時,就會一並被處理到,導致編碼出現問題。

改法就是加上 /u參數,避免把 UTF8 字元給拆開來處理!

其實也不只有去解析 HTML 文件會碰到,只要是處理有 UTF8 字元的都可能,這個就真的要注意了~

#技術相關 #PHP #正規表示法 #爬蟲 #Parsing #HTML #UTF8 #亂碼 #RegEx

- Powered by Mxp.TW -FB2WP-


Share:

作者: Chun

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

發佈留言

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


文章
Filter
Apply Filters
Mastodon