玉将&转换为&使用JavaScript时

时间:2019-09-06 10:19:24

标签: javascript pug html-entities harp

我刚刚开始使用Harp 0.30.1,它是作为预处理器安装的Jade附带的。所以我也只是从Jade开始。

我有一个文件夹,其中包含一组文件,文件名类似This-is-an-MD-file.md。使用此文件夹中的index.jade文件,我要产生以下HTML输出:

<ul>
  <li><a href="This-is-an-MD-file.html">This is an MD file</a></li>
</ul>

我对Jade和mixins足够了解,可以制作出这个...

- var trim = function(string) {
-   var index = string.lastIndexOf(".")
-   return string.substring(0, index).replace(/-/g, " ")
- }

mixin link(fileName)
  li
    a(href='#{fileName}') #{trim(fileName)}

ul
  for file in public._contents
    - if (file !== "index.html"){
      +link(file)
    -}

...这给了我我想要的东西。

但是,如果我尝试在替换函数中使用"&nbsp;"而不是" ",我会发现HTML输出使用&amp;而不是&字符。 / p>

<li>
  <a href="This-is-an-MD-file.html">
    This&amp;nbsp;is&amp;nbsp;and&amp;nbsp;MD&amp;nbsp;file
  </a>
</li>

那不是我想要的。

这仅发生在JavaScript函数中。如果我在普通的Jade标记部分中使用&nbsp;,就像这样...

p non&nbsp;breaking&nbsp;space

... HTML的输出完全符合预期。

为什么会这样?是否有一种方法可以在JavaScript部分中转义&字符,以便不将其转换为HTML实体?

1 个答案:

答案 0 :(得分:2)

您可以使用unescaped string interpolation语法(!{variable})而不是常规字符串插值语法(#{variable})来呈现那些不间断的空格。

在您的情况下:

a(href='#{fileName}') !{trim(fileName)}

但是请记住Pug documentation中的警告语:

  

警告

     

请记住,如果未转义的内容来自用户,那么将未转义的内容缓冲到模板中可能会有很大的风险。永远不要相信用户的输入!