Nodejs, разметка побега нефрита
У меня есть приложение Express, использующее механизм просмотра Jade по умолчанию. Когда я пытаюсь отобразить HTML как есть в элементе <pre>
, он становится отображаемым как фактические элементы 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>
Ответы
Ответ 1
Джейд использует удар, чтобы вывести неэкранированный выход. Таким образом, вы поворачиваете регулярный вывод на unescaped output со следующей конструкцией: !=
Если ваш контент находится внутри тега div, вы можете сделать следующее:
div!= content
Ответ 2
В качестве дополнения, вот еще один вариант использования, который вам нужно рассмотреть:
Если вы экстраполируете содержимое HTML с помощью #{...}
, оно все равно даст неверный вывод.
Для этого варианта использования вам нужна альтернатива !{...}
.
Итак,
div= varname
становится
div!= varname
и
div #{varname} is extrapolated badly
становится
div !{varname} is extrapolated perfectly
Ответ 3
Фактически OP запрашивает ускорение, а не отмену. Который я столкнулся сегодня.
Предположим, что у вас есть переменная varName
с содержимым <b>FooBar</b>
.
Затем этот шаблон будет использовать escape-значение:
#foobar= varName
поэтому он становится:
<div id="foobar"><b>FooBar</b></div>
Если вы используете оператор bang:
#foobar!= varName
нефрит не ускользнет, поэтому он станет следующим:
<div id="foobar"><b>FooBar</b></div>
Ответ 4
Это официальный способ:
code= '<div>This code is' + ' <escaped>!</div>'
<code><div>This code is <escaped>!</div></code>
http://jade-lang.com/reference/#unescapedbufferedcode
Ответ 5
Он не встроен в Jade, но вы можете сделать это с помощью фильтра :
(Это можно добавить в любом месте в верхней части 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' );
}
Затем используйте фильтр "escape" в вашем нефритовом файле:
h1 Code Sample
pre
code
:escape
<div>some text</div>
Вывод:
<h1>Code Sample</h1>
<pre>
<code><div>hi</div></code>
</pre>
Источник: Внедрение экранированного кода в шаблон Jade