当前位置:  开发笔记 > 前端 > 正文

在Grails视图中使用HTML编解码器时保留新行

如何解决《在Grails视图中使用HTML编解码器时保留新行》经验,为你挑选了1个好方法。

Grails XSS预防功能非常方便,所以我使用它启用它:

grails.views.default.codec = "html"

但是,这会产生html的问题textareas.如果我们完成textarea并使用Enter来断行,则新行将保存在数据库中,但在视图中会被忽略.我可以使用<%=%>replaceAll('\n',"
")
修复换行符,但填写的HTML代码textarea不会被转义,也不会有XSS预防!

你会如何解决这个问题?



1> Antoine..:

在将您的textarea渲染回GSP之前,您可以

将您的字符串编码为HTML

将换行符转换为
.

这可以通过将以下标记lib保存到grails-app/taglib来实现:

class LinesTagLib { 
  def lines = { attrs, body -> 
    out << attrs['string'].encodeAsHTML().replace('\n', '
\n') } }

由于我们已经在标记中应用了encodeAsHTML(),因此在使用标记时必须禁用HTML编解码器(使用<%=expression%>而不是${expression}):

    

另一种方法是为此编写自己的编解码器:

class HTMLLinesCodec{ 
  static encode = { str -> 
    str.encodeAsHTML().replace('\n', '
\n') } }

然后,您可以通过添加指令将此编解码器用于您希望此行为的GSP文件:

<%@ defaultCodec="HTMLLines" %>

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有