文章的正文字段使用的是富文本编辑器,可以直接在编辑器里面进行排版,最终保存到数据库的是html格式的数据,如:
<p>这是正文</p>
<p>正文第一段</p>
<p>正文第二段</p>
这些内容作为html显示到浏览器时,并不会把html标签<p>...</p>
显示出来,而只显示标签里面的内容。比如:
这是正文
正文第一段
正文第二段
但是为了防止xss跨站脚本攻击,通常模板会对输出的内容做html转义,也就是会把<
>
转义成<
>
,这样就会直接把html标签显示出来。
freemarker通常用?html
进行转义,如${text?html}
,这种方式要对每一个输出的变量都进行转义。
还有一种方式可以对一段的freemarker代码都进行转义,如:
[#escape x as (x)!?html]
...
${text}
...
[/#escape]
这就是正文中会出现html标签的原因。注意模板的开头和结尾是否包含这些代码,如果包含,则代表会对所有输出的变量都进行html转义。
如果希望某些变量不要做html转义,可以使用下面的方式解决这个问题:
[#escape x as (x)!?html]
...
[#noescape]${text}[/#noescape]
...
[/#escape]