grails 2.3将textarea换行符渲染为gsp中的换行符

时间:2014-03-12 20:07:59

标签: grails

我正在运行grails 2.3。新的默认设置具有XSS预防功能。我有一个textarea用户可以输入包含换行符的数据。

我无法将换行符渲染为换行符。

文字区域值:

Something
is
happening
here

在网页中输出的内容:

<span class="description_text">Something&lt;br/&gt;is&lt;br/&gt;&lt;br/&gt;happening&lt;br/&gt;&lt;br/&gt;here.</span>

渲染的GSP应该是什么样的:

Something<br/>is<br/>happening<br/>here<br/>

我尝试的事情:

out << content?.replace('\n', '<br/>').encodeAsHTML()
out << content?.encodeAsHTML().replace('\n', '<br/>')
out << content?.encodeAsHTML()

我在Config.groovy中的设置:

// Legacy setting for codec used to encode data with ${}
grails.views.default.codec = "html"

// GSP settings
grails {
    views {
        gsp {
            encoding = 'UTF-8'
            htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
            codecs {
                expression = 'html' // escapes values inside ${}
                scriptlet = 'html' // escapes output from scriptlets in GSPs
                taglib = 'none' // escapes output from taglibs - NOOOO because we ouput html tags in our taglibs, as do some plugins.
                staticparts = 'none' // escapes output from static template parts
            }
        }
        // escapes all not-encoded output at final stage of outputting
        filteringCodecForContentType {
            //'text/html' = 'html'
        }
    }
}

3 个答案:

答案 0 :(得分:0)

我能够使用JSP样式语法来避免gsp的编码安全性。你可以尝试一下吗?

答案 1 :(得分:0)

在这种特殊情况下,当您希望仅允许用户添加换行符时,您应该可以使用以下内容:

out << content?.encodeAsHTML().replace('&lt;br/&gt;', '<br/>')

虽然它不是最漂亮的解决方案,但我认为它应该有用。

答案 2 :(得分:0)

尝试:

out << content?.encodeAsHTML().replace('\n', '<br/>').encodeAsRaw()

当我想将DB中的一些文本粘贴到模板中时,这对我有用。现在你首先逃避任何脚本恶意,然后将换行转换为br标签。