<XMP>标签用于什么?


75

有人记得这个XMP标签吗?

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


1
可以肯定的是,它被用于编写HTML解析器的烦人的开发人员,并认为这是有效的(并且被Google广泛使用):<xmp style="display:none"><!-- do not remove the plaintext nor xmp tags --><plaintext/><xmp>.</xmp>
Akiva

Answers:


35

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

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


1
实际上,它们在HTML 3.0参考中已经被标记为“过时”。w3.org/MarkUp/html3/html3.dtd日期为1995年8月1日。顺便说一句,它也引用了不推荐使用的确切原因(这将是OP的第二个问题的答案)。
李斯特先生,2016年

1
pre并非替代方案xmp会引用所有包含的文本。非常适合调试。虽然不安全。可在AFAIK的任何地方使用。
可调式

本页解释了为什么<xmp>不安全:html5sec.org/#134
朱利安

@Julien这不是将用户输入连接到HTML的安全方法(因为它仍然容易受到XSS的影响),但是您无论如何都不应该这样做。Afaik,通常使用标签不是安全漏洞。
wizzwizz4'4

64

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

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

如果要在标记中包含<>&之类的特殊字符PRE,必须对它们进行转义,以免浏览器对其进行特殊解释。

相比之下,中的内容XMP标签就不会需要进行转义。

XMP标记中不能包含的唯一字符序列是XMP结束标记(</XMP>)。

XMP我测试过的浏览器仍然支持。您可以尝试使用xmp.html。查看源以查看标签。


18
我已经介绍了四种表示代码的方法。Textarea似乎是赢家。这是我的评估:dadinck.x10.mx/code_example.html
dadinck

2
安全提示:XMP是不是一个XSS防护-它的唯一目的是,当你创建一个静态的HTML页面自己,你想展示一些代码,而不逃了...
jave.web

@dadinck,您的xml.html链接链接到“与该网站关联的Web托管帐户已被暂时中止!” ....
Pacerier,2015年

@Pacerier对不起。那只是暂时的。又回来了。
dadinck

1
@Boldewyn<plaintext><xmp>tag都已弃用,因此是不可行的。最好的替代方法是<textarea>标签。
Agnius Vasiliauskas

19

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


24
也许您可以解释为什么PRE不能替代XMP。就目前而言,这并不是一个真正的答案。
Anders R. Bystrup 2012年

18
<xmp>忽略HTML标签和实体;<pre>不。
阿尔瓦罗·冈萨雷斯

1
如何<textarea />作为替代品?
James Love

1
如何使用服务器端脚本转义?:P ................................................. ..........................................<pre><?php echo htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); ?></pre>
jave.web

2
尝试使用xmp,然后使用pre在浏览器中调试XML输出。xmp将显示正确的输出。
banerban Ghiță 2014年

5

<xmp>trapdown.js一起使用,以格式化降价标记。该名称trapped结合了术语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>

4

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

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


4
为此非常方便。由于var_dump()不返回任何内容,因此需要输出缓冲区函数来对其输出进行HTML编码。<xmp>是编写包装函数的快速替代方法,可在任何地方使用。
阿尔瓦罗·冈萨雷斯

请注意,如果在中有任何用户输入,则var_dump()此方法会使您容易受到XSS攻击。
wizzwizz4 2012年


2

我使用<textarea>,它将html代码放入整洁的框中,并清楚地将代码定义为与之前或之后的文本不同。

<textarea><b>boldtext</b><textarea>


2

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.