nodejs, разметка Jade Escape - PullRequest
       3

nodejs, разметка Jade Escape

11 голосов
/ 03 августа 2011

У меня есть приложение Express, использующее движок Jade View по умолчанию. Когда я пытаюсь отобразить HTML как есть в элементе <pre>, он отображается как фактические элементы DOM вместо буквенных символов.

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

Выход:

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

Как мне избежать HTML, чтобы он отображался следующим образом?

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

Ответы [ 5 ]

23 голосов
/ 04 августа 2011

Джейд использует удар, чтобы форсировать выход без выхода.Поэтому вы превращаете обычный вывод в неэкранированный вывод с помощью следующей конструкции: !=
Если ваш контент находится внутри тега div, вы можете сделать следующее:

div!= content
19 голосов
/ 19 июля 2013

В качестве дополнения приведем еще один вариант использования, который вам необходимо рассмотреть:

Если вы экстраполируете HTML-контент, используя #{...}, он все равно даст неправильный вывод. Для этого варианта использования вам нужна альтернатива !{...}.

Итак,

div= varname

становится

div!= varname

И

div #{varname} is extrapolated badly

становится

div !{varname} is extrapolated perfectly
8 голосов
/ 13 сентября 2011

На самом деле ОП просит о спасении, а не о спасении. С которым я столкнулся сегодня.

Предположим, у вас есть переменная varName с содержанием <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>
3 голосов
/ 28 января 2014

Это официальный путь:

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 / ссылка / # unescapedbufferedcode

2 голосов
/ 27 января 2014

Он не встроен в Jade, но вы можете сделать это с фильтром :
(Это можно добавить в любом месте вверху 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'   );
}

Затем используйте фильтр 'escape' в вашем нефритовом файле:

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

Выход:

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

Источник: Встраивание экранированного кода в шаблон Jade

...