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

本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣新台幣 贊助支持。


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

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


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

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

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

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

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

#技術相關 #正規表示法 #爬蟲 #亂碼

- Powered by Mxp.TW -FB2WP-


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[///////////____36%_________]

發佈留言

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


文章
Filter
Mastodon