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> <div>some text</div> </code> </pre>
翡翠用砰的一声强迫输出。 所以你用下面的结构把正常输出转换成非转义输出: !=
如果您的内容位于div标签内,则可以执行以下操作:
div!= content
另外,还有一个用例需要考虑:
如果您使用#{...}
来推断HTML内容,它仍会给出错误的输出。 对于这种用例,您需要!{...}
替代scheme。
所以,
div= varname
变
div!= varname
和
div #{varname} is extrapolated badly
变
div !{varname} is extrapolated perfectly
实际上OP要求逃跑,而不是逃避。 我今天碰到的
假设您的varName
variables带有<b>FooBar</b>
内容。
那么这个模板将使用转义值:
#foobar= varName
所以它变成:
<div id="foobar"><b>FooBar</b></div>
如果你使用爆炸操作符:
#foobar!= varName
玉不会逃避它,所以它变成:
<div id="foobar"><b>FooBar</b></div>
这是官方的方式:
code= '<div>This code is' + ' <escaped>!</div>' <code><div>This code is <escaped>!</div></code>
这不是build立在翡翠,但你可以做一个filter :
(这可以添加到app.js顶部的任何地方)
require('jade').filters.escape = function( block ) { return block .replace( /&/g, '&' ) .replace( /</g, '<' ) .replace( />/g, '>' ) .replace( /"/g, '"' ) .replace( /#/g, '#' ) .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><div>hi</div></code> </pre>
来源: 在Jade模板中embedded转义代码