【问题标题】:What was the <XMP> tag used for?<XMP> 标签是做什么用的?
【发布时间】:2010-09-05 11:53:07
【问题描述】:

有人记得XMP 标签吗?

它的用途是什么?为什么不推荐使用它?

【问题讨论】:

  • 很确定它被用于编写 html 解析器的烦人的开发人员,考虑到这是有效的(并且被谷歌使用过):&lt;xmp style="display:none"&gt;&lt;!-- do not remove the plaintext nor xmp tags --&gt;&lt;plaintext/&gt;&lt;xmp&gt;.&lt;/xmp&gt;

标签: html tags


【解决方案1】:

在 W3C 上的 Google 快速搜索显示,XMP 被引入用于在 HTML 3.2 及更早版本中显示预格式化文本。当 W3C 弃用 XMP 标签时,它建议使用 PRE 标签作为首选。

更新:http://www.w3.org/TR/REC-html32#xmphttp://www.w3.org/MarkUp/html-spec/html-spec_5.html#SEC5.5.2.1

【讨论】:

  • 实际上它们已经在 HTML 3.0 参考中被标记为“过时”。 w3.org/MarkUp/html3/html3.dtd 约会 1995 年 8 月 1 日。顺便说一下,其中还引用了它被弃用的确切原因(这将是 OP 第二个问题的答案)。
  • pre 不是替代 xmp 引用所有包含的文本。非常适合调试。虽然不安全。 AFAIK 无处不在。
  • 此页面解释了为什么&lt;xmp&gt; 不安全:html5sec.org/#134
  • @Julien 这不是将用户输入连接到 HTML 的安全方式(因为它仍然容易受到 XSS 的影响),但无论如何你都不应该这样做。 Afaik,使用标签一般不是安全漏洞。
【解决方案2】:

仍然可以显示原始 html - 如果您在脚本中使用它,请断开开始标记。

var stuff='<xmp'+'>this is shown as is<br/>hello</xmp>';
document.getElementById("x").innerHTML=stuff;
&lt;div id="x"&gt;&lt;/div&gt;

【讨论】:

    【解决方案3】:

    http://www.w3.org/Bugs/Public/show_bug.cgi?id=12235

    对于 HTML5。根据 HTML5 编辑器(cmets 11 和 12),无论哪种方式都非常接近。

    【讨论】:

      【解决方案4】:

      我仍然使用xmp 标签在 PHP 中调试 var_dump();。由于某种原因,我只是不记得使用pre 标签。

      我认为这并不重要,因为如果你真的想输出文本,你应该使用 textareareadonly 属性。

      【讨论】:

      • 为此目的非常方便。由于var_dump() 不返回任何您需要的输出缓冲区函数来对其输出进行HTML 编码。 &lt;xmp&gt; 是编写包装函数的快速替代方法,并且可以在任何地方使用。
      • 请注意,如果var_dump() 中有任何用户输入,此方法会使您容易受到 XSS 攻击。
      【解决方案5】:

      XMPPRE 不同。 PRE 标签内的内容格式如下:

      • 内容以固定字体显示,
      • 保留所有空格,并且
      • 每个换行符开始一个新行。

      如果您想在PRE 标签中包含&lt;&gt;&amp; 等特殊字符,则必须对其进行转义,以免浏览器对其进行特殊解释。

      相比之下,XMP 标签内的内容不需要转义。

      XMP 标签中唯一不能包含的字符序列是 XMP 结束标签 (&lt;/XMP&gt;)。

      XMP 仍然被我测试过的浏览器支持。你可以试试xmp.html。查看源代码以查看标签。

      【讨论】:

      • 我已经介绍了四种表示代码的方式。 Textarea 似乎是赢家。这是我的评价:dadinck.x10.mx/code_example.html
      • 安全注意事项:XMP 不是 XSS 保护 - 它的唯一目的是当您创建 静态 HTML 页面 您自己 并且你想显示一些代码而不转义它......
      • @dadinck,您的 xml.html 链接链接到 “与该网站关联的虚拟主机帐户已被暂时停用!”....
      • @Pacerier 对不起。那只是暂时的。它又回来了。
      • @Boldewyn &lt;plaintext&gt; 以及&lt;xmp&gt; 标签已被弃用,因此不可行。可能最好的选择是&lt;textarea&gt; 标签。
      【解决方案6】:

      XMP 做了一些 PRE 不支持的事情。我仍然依赖 XMP,没有替代品。

      【讨论】:

      • 或许您可以解释一下为什么 PRE 不能替代 XMP。就目前而言,这并不是一个真正的答案。
      • &lt;xmp&gt; 忽略 HTML 标签和实体; &lt;pre&gt; 没有。
      • &lt;textarea /&gt;代替怎么样?
      • 使用服务器端脚本转义怎么样? :P ................................... ................................................&lt;pre&gt;&lt;?php echo htmlspecialchars("&lt;a href='test'&gt;Test&lt;/a&gt;", ENT_QUOTES); ?&gt;&lt;/pre&gt;
      • 尝试在浏览器中使用 xmp 调试 XML 输出,然后使用 pre。 xmp 将显示正确的输出。
      【解决方案7】:

      我使用了&lt;textarea&gt;,它将html代码放入一个整洁的盒子中,并清楚地将代码定义为与之前或之后的文本不同。

      &lt;textarea&gt;&lt;b&gt;boldtext&lt;/b&gt;&lt;textarea&gt;

      【讨论】:

        【解决方案8】:

        &lt;xmp&gt;strapdown.js 一起用于格式化降价符号。 strapdown 这个名字结合了 bootstrapmarkdown 这两个词。

        <!DOCTYPE html>
        <html>
          <title>Example</title>
          <xmp theme="united">
        ## Example
        
         - note one
         - note two
         - note three
          </xmp>
          <script src="http://strapdownjs.com/v/0.2/strapdown.js"></script>
        </html>
        

        【讨论】:

          猜你喜欢
          • 2012-01-08
          • 2014-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多