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

這幾天都在用 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-

Facebook 外掛整合

Share: