当我使用时
<g:link url="https://www.google.co.in">Google 1</g:link>
这给了我正确的结果,指向https://www.google.co.in的链接。
Google 1
但是当我使用
时${g.link(url: "https://www.google.co.in") { 'Google 2' }}
这给了我
<a href="https://www.google.co.in">Google 2</a>
这是一个文字而非链接。
我已尝试encodeAsHTML()
和decodeHTML()
,但结果相同。
我在这里做错了什么?如何获取链接而不是文字?
在我的配置文件中使用grails 2.3.7
并拥有grails.views.default.codec = "html"
。
答案 0 :(得分:3)
您可能在grails中看到了一个安全功能:“跨站点脚本(XSS)预防”
简而言之,尝试(未经测试):
${raw(g.link(url: "https://www.google.co.in") { 'Google 2' })}
有关详情,请参阅http://grails.org/doc/latest/guide/security.html#xssPrevention。所有这一部分都值得一读'因为有几种可用的配置选项。
答案 1 :(得分:2)
这些信息非常有用,它来自grails文档
http://grails.org/doc/2.3.1/guide/security.html
创建的每个标记库都有机会使用“defaultEncodeAs”属性指定用于编码标记库输出的默认编解码器:
static defaultEncodeAs = 'html'
也可以使用“encodeAsForTags”在每个标签上指定编码:
static encodeAsForTags = [tagName: 'raw']
答案 2 :(得分:1)
您在grails.views.default.codec='html'
中设置Config.groovy
,默认情况下会在应用中的所有${expressions}
上转义HTML。
禁用gsp顶部的gsp set <%@page defaultCodec="none" %>
的HTML编码。