2

在我的 GSP 中,我有类似的内容:

<head>
  <meta property="og:image"
    content="${createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true)}" />

</head>

当我查看生成的代码时,我发现:

<meta property="og:image"
    content="http://www.myurl.com/main/getImage/faf878ef93996f26c1?width=115&amp;height=200" />

问题在于有一些放大器;里面的值。

在我的控制器中:

参数如下所示:

[width:115, amp;height:200, id:faf878ef93996f26c1, action:getImage, controller:main]

问题是 params.height 不再工作了,因为有 amp;再次。

如何正确解码此网址?有没有办法让 Grails 不放置放大器?在网址里面?

当我在我的 GSP 正文中执行以下操作时:

<body>
  ${createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true)}"
</body>

我得到正确的网址:

http://www.myurl.com/main/getImage/faf878ef93996f26c1?width=115&height=200

为什么 Grails 将这些 url 设置为不同的?如何解决?

4

3 回答 3

1

问题是您将链接呈现为 gsp 中的字符串,因此 grails 在打印之前对其进行编码。您甚至不必有链接,只需尝试

"${m&m}" 你会看到 grails 把它渲染成 m&m

一种解决方案是使用直接渲染,我相信它绕过了 grails 中的额外编码

<% out << '<meta property="og:image" content="' + createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true) + '" />' %>
于 2013-07-01T22:45:33.953 回答
1

您也可以关闭该特定页面的默认编码。

将以下内容放在 gsp 页面的顶部

<%@page defaultCodec="none" %>
于 2013-07-02T06:40:04.803 回答
1

我不知道这个问题是否仍然存在,但有人可能会遇到这个问题。所以解决方案是将链接生成的代码包装到 raw() 函数中:

<meta property="og:image"
content="${raw(createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true))}" />

但是编码的 url 也可以。通常,此属性用于在链接到某处共享的网站时显示图像。所以服务可以正常处理和解码

于 2020-02-11T12:01:49.493 回答