【问题标题】:Display a string with \n in Jade在 Jade 中显示带有 \n 的字符串
【发布时间】:2012-11-11 23:55:59
【问题描述】:

我需要使用 Jade 显示一个包含 \n 的字符串,并且我想将这些字符转换为 <br>。我尝试通过两种方式做到这一点:

- var s = 'text\nand\ntext';
p= string
p= string.replace(/\n/g, '<br />')

但在第一种情况下,我看不到空格,并且在第二段中,HTML 被转义了。

【问题讨论】:

    标签: node.js pug


    【解决方案1】:

    使用!= 而不是=

    p!= string.replace(/\n/g, '<br />')
    

    查看docs了解更多信息

    【讨论】:

    • 但是如果string包含例如&lt;script&gt;标签,它将被渲染
    • 这不是你想要的吗?你也可以使用 - var html = "" | !{html}
    • 我想在
      中转换 \n 但您示例中的 html var 应呈现为 &amp;lt;script&amp;gt;&amp;lt;/script&amp;gt;
    【解决方案2】:

    我喜欢这样解决它:

    - var text = '<script></script>\nhi';
    p!= text.replace(/</g, "&lt;").replace(/>/g, '&gt;').replace(/\n/g, '<br />')
    

    它不会转义 html 特殊字符,但由于我使用的是&lt;meta charset="utf-8"&gt;,所以应该没问题。

    【讨论】:

    • 文本是否由用户提供?如果是这样,您可能需要担心XSS。用户输入应该总是被转义。否则他们可能会做一些恶意的事情,比如输入&lt;script&gt;window.location = 'myevilsite.com'&lt;/script&gt;。这是一个question,应该可以帮助您入门。如果文本是安全的,则忽略上述内容:)
    【解决方案3】:

    这是我的解决方案:

        p
          striped = body.replace(/\r/g, '')
          paragraph = body.split(/\n{2,}/g)
          if paragraph.length
            each para in paragraph
              | <p>
              line = para.split(/\n/g)
              first = line.shift()
              | #{first}
              each li in line
                | <br />
                | #{li}
              | </p>
    

    我扔掉\r's 并拆分为 2 个或更多 \n's。如果这导致一个非空数组,我循环该数组并添加一个开头的&lt;p&gt; 标记。任何带有单个\n 的行都被分割并用&lt;br&gt; 标签循环,然后以&lt;/p&gt; 标签结束。起泡,冲洗,重复。奖励:字符串被正确转义。

    玉真棒! (和正则表达式一样)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多