首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

IE 顯示「無法顯示 XML 頁」錯誤:屬性值中非法字元 '<' 解決方案

     編輯:程式設計綜合問答

在 IE 中以 POST 請求載入 XML 時出現「屬性值中不能使用字符 '<'. 第 1 行,位置 218」,而 Chrome/Firefox 正常。這是典型的 XML 編碼缺失問題,IE 的 MSXML 解析器比其他瀏覽器更嚴格。

錯誤根因

XML 標準規定:屬性值與元素內容中的 '<', '>', '&', ''', '"' 必須實體化轉義。若伺服器回傳的 XML 直接包含未轉義的 <(如 <note title="a<b">),IE 會拋出此錯誤並拒絕渲染。

修正方法

  1. 伺服器端轉義(推薦):在序列化 XML 時,使用標準庫自動處理實體編碼。
    C#:XmlWriter / XElement 自動轉義。
    Java:StringEscapeUtils.escapeXml11() (Apache Commons Text) 或 javax.xml.bind。
    PHP:htmlspecialchars($str, ENT_XML1 | ENT_QUOTES, 'UTF-8')。
    Python:xml.sax.saxutils.escape(data, {'"': '"', \"'\": '''})。
  2. 手動替換(僅臨時測試):將所有 < 替換為 &lt;,> → &gt;,& → &amp;。注意順序:先轉 &,再轉其他,避免二次轉義。
  3. CDATA 區塊:若大量內容包含特殊字元,可包裹在 <![CDATA[ ... ]]> 中,但屬性值不可用 CDATA。

為何其他瀏覽器不報錯?

  • Chrome/Firefox/Edge 使用寬容型解析器(如 libxml2、Expat),遇到未轉義 < 會嘗試修正並繼續渲染,僅在主控台輸出警告。
  • IE/MSXML 嚴格遵循 XML 1.0 標準,遇到格式錯誤直接終止解析。

快速排查清單

1. 抓取原始回應(F12 Network → Response),搜尋未轉義的 < 或 &
2. 確認 Content-Type: application/xml 或 text/xml
3. 檢查伺服器序列化代碼是否使用標準 XML API
4. 若為舊系統無法修改伺服器,考慮在前端用 XSLT/JS 預處理再交給 IE

修正 XML 實體編碼後,IE 即可正常載入並套用 XSL 樣式表。建議建立自動化測試,驗證所有 XML 輸出端點符合 Well-formed 標準,杜絕此類瀏覽器相容性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved