转义 <script> 标签内的内容

Escape the content inside a <script> tag

我想像这样将 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>

如您所见,我遇到的问题是由 XSLT 代码中的 <script> 标记引起的。逃避它的最简单解决方案是什么?

感谢您的帮助。

{{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>

在其中随意添加标签是不可取的。如果您不能单独加载 XSLT,备选方案是:

  • 将其存储在 JavaScript 字符串中(最干净的选项)
  • 正确转义 XSLT:
    • <需要用&lt;
    • 转义
    • 您的 XSLT 中已经存在的任何 XML 实体转义都需要进行双重转义。例如。如果有 &amp;&#10; 之类的数字转义符,请将它们转换为 &amp;amp;&amp;#10;.
  • 使用 XHTML 混合其他 XML 不是问题。 (但是,您必须使用正确的 mimetype 为它提供服务,并确保您工作干净利落。这是一个干净但 "old-fashioned" 的解决方案。)

无论如何,请省略 XML 声明。这在这里没有意义,甚至可能导致问题。