當資料庫儲存的內容包含 HTML 標籤(如富文本編輯器輸出),直接在 JSP 以 ${content} 輸出會被轉義顯示為原始標籤文本。需將 HTML 字串作為標籤渲染,有兩種常用方案。
<%
out.println("<table><tr><td>內容</td></tr></table>");
%>
缺點:混合 Java 代碼與視圖,違背 MVC 分層,難以維護。
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<c:out value="${content}" escapeXml="false" />
原理:<c:out> 預設 escapeXml=true,會將 < > & 等轉為實體;設為 false 則原樣輸出,瀏覽器解析為標籤。
content 來自不可信用戶輸入,關閉轉義會導致腳本注入。Jsoup.clean() 或 OWASP Java HTML Sanitizer 白名單過濾標籤/屬性。escapeXml="false"。<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<html>
<body>
<h3>富文本內容渲染</h3>
<c:out value="${article.content}" escapeXml="false" />
</body>
</html>