現代瀏覽器(Chrome、Firefox、Edge 等)基於安全考量,預設停用外部實體解析(XXE 防護),導致 XML 中引用外部 DTD 定義的實體(&entityName;)無法展開顯示。
<?xml version="1.0"?> <!DOCTYPE doc SYSTEM "entities.dtd"> <doc>©</doc> <!-- 瀏覽器顯示空白或報錯 -->
<!DOCTYPE doc [
<!ENTITY copy "©">
]>
DocumentBuilderFactory 設定 FEATURE_SECURE_PROCESSING、EXTERNAL_GENERAL_ENTITIES 等屬性,在後端完成實體展開後再輸出純 XML/HTML 給前端。© 或 ©(HTML 實體),繞過 XML 實體機制。DocumentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true) 防禦 XXE 攻擊。