Escape контент внутри тега <script> - PullRequest
0 голосов
/ 07 января 2019

Я хочу сохранить код XSLT в HTML-файле, например:

<script id="xsltCode" type="text/xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    ...
      <script>...</script>
    ...
  </xsl:stylesheet>
</script>

Как видите, проблема, которую я имею, вызвана тегом <script> внутри кода XSLT. Какое самое простое решение избежать этого?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Бросать туда произвольные теги не рекомендуется. Если вы не можете загрузить XSLT отдельно, альтернативы:

  • Сохраните его в строке JavaScript (самый чистый вариант)
  • Правильно избегать XSLT:
    • < необходимо экранировать с помощью &lt;
    • Любой экранирующий объект XML, уже существующий в вашем XSLT, должен быть дважды экранирован. Например. если есть &amp; или числовой escape, например &#10;, превратите их в &amp;amp; и &amp;#10;.
  • Используйте XHTML, где смешивание с другим XML не является проблемой. (Тем не менее, вы должны подавать его с правильным mimetype и убедиться, что вы работаете чисто. Это чистое, но «старомодное» решение.)

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

0 голосов
/ 07 января 2019

{{html "</sc"+"ript>"}} может заменить ваш первый тег </script>. Я считаю, что ваша проблема в том, что первый </script> рассматривается как закрывающий тег вашего <script id="xsltCode" type="text/xml">, что, очевидно, нарушает ваш код. Результат:

<script id="xsltCode" type="text/xml">
  <?xml version="1.0" encoding="UTF-8"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    ...
      <script>...{{html "</sc"+"ript>"}}
    ...
  </xsl:stylesheet>
</script>
...