【问题标题】:Escape the content inside a <script> tag转义 <script> 标签内的内容
【发布时间】:2019-01-07 17:08:01
【问题描述】:

我想将 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 代码中的 &lt;script&gt; 标记引起的。逃避它的最简单解决方案是什么?

感谢您的帮助。

【问题讨论】:

  • 这看起来是个坏主意。你想达到什么目的?
  • 我正在尝试存储一个 XSLT 代码,该代码稍后将用于转换用户提供的 XML 文件。我不想使用 XMLHttpRequest 检索此代码,因为我希望我的所有应用程序都压缩在 1 个文件中。 XSLT 代码永远不会改变。
  • 您是如何确定存在问题的?
  • 因为正如Senrab所说,XSLT代码中的&lt;/script&gt;标签被视为脚本的结束标签。

标签: html xml xslt escaping script-tag


【解决方案1】:

在那里扔任意标签是不可取的。如果您不能单独加载 XSLT,替代方法是:

  • 将其存储在 JavaScript 字符串中(最干净的选项)
  • 正确转义 XSLT:
    • &amp;lt; 需要用 &amp;lt; 转义
    • XSLT 中已经存在的任何 XML 实体转义都需要进行双重转义。例如。如果有 &amp;amp;amp; 或像 &amp;amp;#10; 这样的数字转义,请将它们转换为 &amp;amp;amp;&amp;amp;#10;
  • 在不存在与其他 XML 混合问题的情况下使用 XHTML。 (但是,您必须使用正确的 mimetype 来提供它,并确保您干净地工作。这是一个干净但“老式”的解决方案。)

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

【讨论】:

  • 在其中扔任意标签并不是真正可取的”,您有具体的理由吗?从我正在阅读的关于script 标签的内容来看,它应该完全能够包含任何 XML 文档(尽管我怀疑 MIME 类型需要是 application/xml 并且应该删除 XML 声明)。
  • 我不知道&lt;script&gt; 元素应该支持application/xml。您是否有任何描述此内容的链接?我找不到任何东西in the specs。即使application/xml 技巧应该在理论上有效,但我认为它在实践中行不通 (see example)。
  • 1.正如您所看到的hereapplication/xmltext/xml 都应该可以正常工作。 2. 尽管 MIME 类型拼写错误,我认为您的“实践中”示例没有任何问题。
  • XML 声明是什么意思? &lt;?xml ...?&gt; 行?
  • @JacopoStanchi XML 声明只对独立的 XML 文件有意义,并且必须是文件中的第一件事。它告诉消费者使用哪种编码。在 HTML 中,使用 &lt;meta charset&gt; 代替。
【解决方案2】:

{{html "&lt;/sc"+"ript&gt;"}} 可以替代您的第一个 &lt;/script&gt; 标记。我相信您的问题是第一个 &lt;/script&gt; 被视为您的 &lt;script id="xsltCode" type="text/xml"&gt; 的结束标记,这显然会破坏您的代码。结果:

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

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-13
    • 2015-05-04
    相关资源
    最近更新 更多