nodejs,玉转义标记

我有一个快速应用程序使用默认的Jade视图引擎。 当我尝试在<pre>元素中按原样呈现HTML时,它将呈现为实际的DOM元素而不是文字字符。

 h1 Code Sample pre code <div>some text</div> 

输出:

 <h1>Code Sample</h1> <pre> <code> <div>some text</div> </code> </pre> 

我如何转义HTML,使其呈现如下?

 <h1>Code Sample</h1> <pre> <code> &lt;div&gt;some text&lt;/div&gt; </code> </pre> 

       

网上收集的解决方案 "nodejs,玉转义标记"

翡翠用砰的一声强迫输出。 所以你用下面的结构把正常输出转换成非转义输出: !=
如果您的内容位于div标签内,则可以执行以下操作:

 div!= content 

另外,还有一个用例需要考虑:

如果您使用#{...}来推断HTML内容,它仍会给出错误的输出。 对于这种用例,您需要!{...}替代scheme。

所以,

 div= varname 

 div!= varname 

 div #{varname} is extrapolated badly 

 div !{varname} is extrapolated perfectly 

实际上OP要求逃跑,而不是逃避。 我今天碰到的

假设您的varNamevariables带有<b>FooBar</b>内容。

那么这个模板将使用转义值:

 #foobar= varName 

所以它变成:

 <div id="foobar">&lt;b&gt;FooBar&lt;/b&gt;</div> 

如果你使用爆炸操作符:

 #foobar!= varName 

玉不会逃避它,所以它变成:

 <div id="foobar"><b>FooBar</b></div> 

这是官方的方式:

 code= '<div>This code is' + ' <escaped>!</div>' <code>&lt;div&gt;This code is &lt;escaped&gt;!&lt;/div&gt;</code> 

http://jade-lang.com/reference/#unescapedbufferedcode

这不是build立在翡翠,但你可以做一个filter
(这可以添加到app.js顶部的任何地方)

 require('jade').filters.escape = function( block ) { return block .replace( /&/g, '&amp;' ) .replace( /</g, '&lt;' ) .replace( />/g, '&gt;' ) .replace( /"/g, '&quot;' ) .replace( /#/g, '&#35;' ) .replace( /\\/g, '\\\\' ) .replace( /\n/g, '\\n' ); } 

然后在你的jade文件中使用'escape'filter:

 h1 Code Sample pre code :escape <div>some text</div> 

输出:

 <h1>Code Sample</h1> <pre> <code>&lt;div&gt;hi&lt;/div&gt;</code> </pre> 

来源: 在Jade模板中embedded转义代码