更新於 2024/11/10閱讀時間約 1 分鐘

XML Parsing Error

用 PHP 程式來修正 RSS 裡的語法解析錯誤。
一些新聞訊息之類的網站提供 RSS (Resource description framework Site Summary, 簡易資訊聚合),以 XML (Extensible Markup Language, 可延伸標記式語言) 語法的格式,供其它的網站連結新聞標題及圖片,顯示在其它網站的頁面中。
圖為 CNN 網站的 RSS 原始碼
但有時,這些 RSS 站因為新聞內容有些特殊字元,會造成後台諸如 PHP 等 動態網頁程式解析錯誤,讓整個該生成的內容都無法順利產生。
Firefox 瀏覽器遇到 XML 解析錯誤的回應
這時有二條路可以做:
  1. 從源頭導正。連絡上該網站的程式設計師,加入一些字元檢查置換的程式,將特殊字元改掉的治本辦法。
  2. 自己做好自己的事。加入一些字元檢查置換程式,將特殊字元改掉的治標辦法。
  3. 熱血貢獻原始碼社群。改進動態網頁程式 (例如 PHP) 的程式,讓它遇到錯誤時能自動修正,不要將問題向後丟。
正確的做法當然是從源頭就導正的治本方法,但我們常常不知道上游會不會因為一些狀況,讓程式又送出特殊字元,造成自己負責的網站又出包。所以在自己的程式裡加上檢查置換程式。程式多了很多邊界檢查,雖然是治標,又會影響效能,但卻是一勞永逸的方法。
下表是會造成 XML 解析錯誤的一些常見字元 (HTML Character Entities),與它該換成什麼字元。更多可以參考 Character Entity Reference Chart
< 要改成 &lt;
> 要改成 &gt;
& 要改成 &amp;
" 要改成 &quot;
' 要改成 &apos;
© 要改成 &copy;
® 要改成 &reg;
以 PHP 程式為例:
  1. 先將網站的 RSS XML 讀進變數中。
  2. 接著將 XML 裡面不是在 tag /tag 裡面的 Header 去掉。
  3. 再用 preg_replace 正規表示式 (Regular Expression) 將 tag /tag 中間的字串改成 HTML 格式的 Character Entities (例如 變成 < )
  4. 再將 XML 的 Header 加回去。
  5. 之後塞給 PHP 的 SimpleXML 函式,就可以順利處理了。
註: 程式碼裡的 fixtags 是 Thomasvdbulk 寫的
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.