我有这样的模板:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<table align="center" border="0" cellpadding="0" cellspacing="0" width="800" style="border-collapse: collapse;">
<p>server response: ${response}</p>
...
</table>
</body>
</html>
实际上服务器可以获得任何响应。
在某些情况下,服务器返回html,freemarker将其解析为html,看起来很糟糕。
我想用标签显示用户行html,依此类推:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>400 Bad Request</title>
<h1>Bad Request</h1>
<p>The browser (or proxy) sent a request that this server could not understand.</p>
我该怎么做?
答案 0 :(得分:3)
启用HTML自动转义功能,因此${response}
不会呈现为HTML(因此您可以避免XSS漏洞)。使用<#ftl output_format="HTML">
启动文件即可。虽然推荐使用ftlh
文件扩展名,然后将incompatible_improvements
设置为至少2.3.24,或将recognize_standard_file_extensions
设置为true
。
如果您因某些原因不想使用自动转义功能,可以写${response?html}
。
由于空白区域不应被浏览器折叠,您当然也希望将插值放入HTML pre
或textarea
或div
某个班级有white-space: pre-wrap
。