Thymeleaf LD + JSON выходная кавычка экранирована - PullRequest
0 голосов
/ 14 июля 2020

Я генерирую строку LD + JSON на сервере, и мне нужно вывести ее на клиенте с помощью Thyemeleaf.

Сгенерировано JSON на сервере выглядит так:

{
  "@context" : "http://schema.org",
  "@type" : "FAQPage",
  "mainEntity" : [ {
    "@type" : "Question",
    "name" : "question text",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "answer text <a href=\"\">link</a> answer text."
    }

Как вы можете видеть, что текст правильно отформатирован на сервере. Я визуализирую его на клиенте следующим образом:

<script type="application/ld+json" th:utext="${faqsJson}">

Но результат в HTML выглядит так:

{

  "@context" : "http://schema.org",
  "@type" : "FAQPage",
  "mainEntity" : [ {
    "@type" : "Question",
    "name" : "question text",
    "acceptedAnswer" : {
      "@type" : "Answer",
      "text" : "answer text <a href="\&quot;\&quot;"> answer text."
    }

Как видите, <a href не экранирован должным образом. По какой-то причине он добавляет &quot; в атрибут href и не экранирует двойные кавычки.

Как мне заставить Thymeleaf выводить строку именно так, как она должна выглядеть?

1 Ответ

1 голос
/ 14 июля 2020

Чтобы отобразить буквальный текст на странице HTML, вы можете использовать th:inline="text" - а для сохранения разрывов строк вы также можете использовать white-space: pre-wrap;:

<div th:inline="text" style="white-space: pre-wrap;">[[${faqsJson}]]</div>

Результирующий HTML на странице браузера отображается следующее:

enter image description here

See встраивание текста для справки.

Не оставляйте пробелов между > в теге div и [ в начале выражения Thymeleaf - в противном случае это станет пробелом на странице HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...