Pytanie nodejs, jade marce escape


Mam aplikację Express korzystającą z domyślnego silnika widoku Jade. Kiedy próbuję renderować kod HTML tak jak jest <pre> element, renderuje się go jako rzeczywiste elementy DOM zamiast literalnych znaków.

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

Wydajność:

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

Jak mogę uciec z kodu HTML, aby renderować go w następujący sposób?

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

11
2017-08-03 12:11


pochodzenie




Odpowiedzi:


Jade używa huku, aby wymusić wyjście z pustymi przestrzeniami. Więc zamieniasz zwykłe wyjście na wyjście z pustymi ramkami z następującym konstruktem: !=
Jeśli Twoja zawartość znajduje się wewnątrz znacznika div, możesz wykonać następujące czynności:

div!= content

23
2017-08-04 12:12



Post pyta, jak to zrobić ucieczka html, a nie unescape. Zobacz moją odpowiedź poniżej. - Raine Rupert Revere


Jako dodatek, oto kolejny przypadek użycia, który należy wziąć pod uwagę:

Jeśli ekstrapolujesz treść HTML za pomocą #{...}, nadal będzie podawał błędne wyniki. W tym przypadku potrzebujesz !{...} alternatywny.

Więc,

div= varname

staje się

div!= varname

I

div #{varname} is extrapolated badly

staje się

div !{varname} is extrapolated perfectly

18
2017-07-19 11:23



Co rozumiesz przez "niewłaściwy wynik"? - Quentin Roy


Właściwie OP prosi o ucieczkę, a nie ucieczkę. Którego natknąłem się dzisiaj.

Załóżmy, że masz varName zmienna przy pomocy <b>FooBar</b> zadowolony.

Następnie szablon użyje wartości z symbolem ewakuacji:

#foobar= varName

więc staje się:

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

Jeśli używasz operatora huk:

#foobar!= varName

jade nie ucieknie, więc staje się:

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

8
2017-09-13 10:49





To jest oficjalny sposób:

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


3
2018-01-28 17:01



KISS ftw. Nie jestem pewien, czy autor uważał, że to możliwe, ale jest to najlepsze rozwiązanie. - DigitalDesignDj


To nie jest wbudowane w Jade, ale możesz to zrobić za pomocą filtr:
(Można to dodać w dowolnym miejscu u góry 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'   );
}

Następnie użyj filtru "escape" w swoim pliku jade:

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

Wydajność:

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

Źródło: Osadzanie unikniętego kodu w szablonie Jade


2
2018-01-27 19:13