【问题标题】:Passing html tags as ejs variables' value将 html 标签作为 ejs 变量的值传递
【发布时间】:2014-09-30 08:54:46
【问题描述】:

我正在使用 Koa 框架和 EJS 模板来呈现视图。我需要将一些 html 元素值发送到视图。但是 ejs 库正在将它们转换为 html 实体。我正在关注他们在https://www.npmjs.org/package/koa-ejs

中的说法

在我的 js 文件中:

yield this.render('ejs file name', {
  a: 'hi',
  b: '<a href="hi">hi</a>'
});

我的视图文件:

<%=a %>
<%=b %>

运行代码后我得到了什么:

hi
&lt;a href="hi"&gt;hi&lt;/a&gt;

但我需要 &lt;a href="hi"&gt;hi&lt;/a&gt; 作为值而不是 &amp;lt;a href="hi"&amp;gt;hi&amp;lt;/a&amp;gt;

有人有什么建议吗?

【问题讨论】:

  • 你想在 EJS 中使用partial 函数。
  • 你能再描述一下吗?因为我已经使用了部分,但这不是问题。这是关于值被即时转换为 html 实体,我将它们传递给 ejs。如何预防?
  • 很高兴与我们分享解决方案:

标签: javascript html node.js ejs


【解决方案1】:

要使用文本编辑器(我使用 tinyMCE)处理 EJS 和 Node JS,只需将标签调用到 &lt;%- &lt;YOUR-VARAIABLE-NAME&gt; %&gt; 中,这会去除所有标签并完美呈现您的文本。

【讨论】:

    【解决方案2】:

    通过手动检查模块代码找到了解决方案。默认情况下,ejs 模块将转义这些值。为了防止这种情况发生,我们需要将自己的转义函数发送到将覆盖现有模块的模块。

    yield this.render('ejs file name', {
      a: 'hi',
      b: '<a href="hi">hi</a>',
      escape: function(html) {
        return String(html);
        // don't replace the htmls
        //.replace(/&/g, '&amp;')
        //.replace(/</g, '&lt;')
        //.replace(/>/g, '&gt;')
        //.replace(/'/g, '&#39;')
        //.replace(/"/g, '&quot;');
      }
    });
    

    【讨论】:

    • 你可以类似地使用这样的东西:stackoverflow.com/a/8125053/648350(参见链接答案的 cmets 部分)
    • 这不是解决方案。感谢您的宝贵时间。
    • 你不是想在 ejs 变量中取消转义 html 吗?这就是 &lt;%- %&gt; 所做的:请参阅 EJS 文档中的未转义缓冲 github.com/visionmedia/ejs
    • 这也不行。请不要浪费你的时间,因为我已经想通了。谢谢。
    • 您能否在答案中包含您的 EJS 文件内容,您是否在做类似&lt;%= escape(b) %&gt; 的事情?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多