我可以在类中转义html标记(重新创建xmp标记)吗?

时间:2013-02-17 01:04:03

标签: javascript html escaping markdown xmp

有几种方法可以考虑这个问题。为自己决定哪个对你最有用......

  • javascript可以重新创建已弃用的< xmp>用“xmp”类标记?
  • 我们可以在内联代码中模仿SO的降价处理器转义标记吗?
  • (metaSO,我承认)SO的md处理器如何在内联代码中转义标签?
  • 我们能逃脱吗?在HTML中嵌入的markdown代码块?

目标:一个逃脱<的类,允许该类包含文本&lt; html&gt;,&lt; body&gt;,&lt; head&gt;,&lt; script&gt;,&lt; style&gt;,&lt; body&gt;,以及不属于&lt; body&gt;内的任何其他标签或者是专门处理的,没有专门处理它们。

&LT; XMP&GT;实现了这一点(实际上仍然是 - 已弃用但仍支持浏览器):<xmp><body></xmp>&lt;body&gt;类似。 SO的降价处理器在内联代码中实现了这个:显示<body>只需编写`&lt; body&gt;`(它本身就是\`&amp; lt; body&gt; \`而不能包含在SO代码块中......我不是唯一一个可以使用它的人;)

我的解决方案到目前为止 - 用<替换所有&lt; - 负责处理不太特殊的HTML标记(这些内部&lt; body&gt;静态内容标记是否有名称?&lt; div&gt;,&lt; code&gt;,&lt; span&gt;等),但“特殊”标签仍然必须以&amp; lt;而不是&lt;

Javascript:
xmps = document.getElementsByClassName('xmp');
for (var i = 0; i < xmps.length; i++) {
    var xmp = xmp.item(i);
    var newhtml = xmp.innerHTML.replace(/\&gt;/g,"\>").replace(/\&lt;/g,"\<");
    xmp.innerHTML = newhtml;
    }

我可以写<div class="xmp">&lt;body></div>

允许什么

<div class="xmp"><body></div>

或者怎么样?

<div class="xmp">
    <body>
    &/div>
</div>

我的项目的详细信息可能很重要:class="xmp"中会有标记,因此我们需要注意行初始>。没有用户输入,因此安全性不是(?)问题。我希望有一个不使用jQuery的解决方案。

1 个答案:

答案 0 :(得分:0)

您无法使用JavaScript创建xmp的功能,因为该功能与HTML解析有关。当JavaScript可以使用它时,浏览器已经解析了该元素。

另一方面,我认为没有必要。据我所知,所有浏览器都支持xmp,HTML5 CR要求保留支持,新浏览器也要实现它。它还说作者不得使用它,但这并不意味着xmp不起作用。