Правильно декодировать параметры URL-адреса Grails?

В моем 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" />

Проблема в том, что внутри есть некоторое значение amp;.

В моем контроллере:

Параметры выглядят так:

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

Проблема в том, что params.height больше не работает, так как есть amp; снова.

Как правильно расшифровать этот URL? Есть ли способ, которым Grails не размещает amp; внутри URL?

Когда я делаю следующее в своем теле GSP:

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

Я получаю правильный URL:

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

Почему Grails устанавливает эти URL-адреса по-разному? Как это исправить?


person confile    schedule 01.07.2013    source источник


Ответы (3)


Проблема в том, что вы визуализируете свою ссылку в виде строки в gsp, поэтому Grails кодирует ее перед печатью. Вам даже не обязательно иметь ссылку, просто попробуйте

"${m&m}", и вы увидите, что Grails отображает это как mm

Одним из решений было бы использовать прямой рендеринг, который, я считаю, обходит дополнительное кодирование в Grails.

<% out << '<meta property="og:image" content="' + createLink(controller:'main', action:'getImage', id:item.id, params:[width: 115, height:200], absolute : true) + '" />' %>
person Tomas Lin    schedule 01.07.2013
comment
Это не работает. Я получил: ‹sitemesh:captureMeta gsp_sm_xmlClosingForEmptyTag=/ property=og:image content=.... - person confile; 02.07.2013

Вы также можете отключить кодировку по умолчанию для этой конкретной страницы.

Поместите следующее вверху страницы gsp

<%@page defaultCodec="none" %>
person Sudhir N    schedule 02.07.2013
comment
Это не работает. Я получаю тот же результат. Любые другие предложения? - person confile; 02.07.2013

Не знаю, актуален ли еще этот вопрос, но может кто-то застрял с этой проблемой. Таким образом, решение заключается в переносе сгенерированного кода ссылки в функцию raw():

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

Однако закодированный URL тоже будет работать. обычно это свойство используется для отображения изображения, когда ссылка на веб-сайт где-то размещена. Таким образом, службы могут нормально обрабатывать и декодировать его.

person Oleg Baskakov    schedule 11.02.2020