1

我刚刚开始使用安装了 Jade 作为预处理器的Harp 0.30.1 。所以我也是从 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;而不是&字符。

<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 函数中。如果我&nbsp;在普通 Jade 标记部分使用,像这样......

p non&nbsp;breaking&nbsp;space

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

为什么会这样?有没有办法转义&JavaScript 部分中的字符,使其不转换为 HTML 实体?

4

1 回答 1

2

您可以使用未转义的字符串插值语法 ( !{variable}) 而不是常规的字符串插值语法 ( #{variable}) 来获得要呈现的不间断空格。

在你的情况下:

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

但请记住Pug 文档中的这个警告词:

警告

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

于 2019-09-06T15:53:25.217 回答