【问题标题】:How to render the html stored in the database to an ejs page如何将存储在数据库中的html渲染到ejs页面
【发布时间】:2021-03-08 00:48:45
【问题描述】:

我相信这很容易,但似乎无法弄清楚。

我在我的 nodejs/express webapp 中安装了 Quilljs 编辑器,它将我的描述存储在 mysql 数据库中为<p><strong>This is the quill data. How are we doing dev?</strong></p>

现在我的 ejs 页面如下所示:

<% data.forEach(function(d,index){ %>
   <p> <%= d.description %> </p>
<% }) %>

但这显然会将数据呈现为存储在数据库中(带有pstrong 标签)。

我尝试了什么:

  • 尝试使用&lt;pre&gt; 以使格式保持不变(只是新手尝试)。
  • 尝试了 jquery 的 .html().load() 方法将数据更新为 HTML,但没有用。

如何将其转换为 html?以便格式化文本打印结果 HTML 而不是源代码。

【问题讨论】:

    标签: javascript html node.js express ejs


    【解决方案1】:

    使用&lt;%- 而不是&lt;%=

    <% data.forEach(function(d,index){ %>
       <p> <%- d.description %> </p>
    <% }) %>
    

    您可以查看标签段落以在ejs docs 中查看有关&lt;%=&lt;%- 的更多用法

    注意:如果这样做,请小心 XSS 问题。
    你需要一个sanitize-html 来保存你的html。

    编辑1

    您无需将其分配给新变量。

    <% data.forEach(function(d,index){ %>
      <% if (d.description.length > 75) { %>
        <p> <%- d.description.substring(0, 75) %> </p>
      <% } else { %>
        <p> <%- d.description %> </p>
      <% }%>
    <% }) %>
    

    【讨论】:

    • 行得通!谢谢。我可以在 scriptlet 标签中使用&lt;%- 吗?像这样:&lt;% &lt;%- d.description %&gt; %&gt;?有什么选择?
    • 为什么要这么做?
    • 我想将描述限制为 75 个字母。因此,我想对html格式的文本进行一些js操作如:&lt;% var theDesc = &lt;%- d.description %&gt;; var newStr; if(theDesc.length &gt;75) { newStr = theDesc.substring(0,75); } else newStr = theDesc; %&gt;。有可能吗?
    • 显然,如果我删除上面代码中 d.description 周围的&lt;%- %&gt;,它将起作用。但随后它会呈现像这样的变量&amp;gt;p&amp;lt; Some text &amp;gt;/p&amp;lt;。这就是我想要做的全部事情。
    • 非常感谢这位朋友。我对使用 NodeJS 的模板引擎很陌生。并且应该为此搜索文档。再次感谢您的宝贵时间。
    【解决方案2】:

    不要保存 HTML。

    这会给您带来很多问题。 尝试制作一些像 json 这样的任意数据结构并用你的 EJS 打印出来。

    【讨论】:

    • 正如我所说,先生,我正在使用 quiil 编辑器,它为我提供了那些 HTML 标签以保持样式/格式不变。您能否向我展示一些方法或将我链接到相关文章/文档/博客/任何内容以实现您所说的?那会有很大帮助。谢谢。
    • 您可以使用一些 AST(抽象语法树)保留格式
    猜你喜欢
    • 2011-12-25
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    • 2013-09-25
    相关资源
    最近更新 更多