将 html 标签作为 ejs 变量的值传递

Posted

技术标签:

【中文标题】将 html 标签作为 ejs 变量的值传递【英文标题】:Passing html tags as ejs variables' value 【发布时间】: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。如何预防? 很高兴与我们分享解决方案: 【参考方案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;');
  
);

【讨论】:

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

以上是关于将 html 标签作为 ejs 变量的值传递的主要内容,如果未能解决你的问题,请参考以下文章

使用 JavaScript 和 EJS 获取 HTML 标记的内部文本并作为值传递给输入字段

php如何将变量的值传递给html

如何使用 EJS 模板引擎将变量传递给内联 javascript?

将数组从 EJS 传递到 Javascript

将变量从 JS 传递到 VB.net

JavaScript--函数-按值传递