Nodejs express.render渲染时,怎么不格式化html标签

Nodejs express.render渲染时,怎么不格式化html标签

模板引擎为:ejs

<pre> express.render(‘index’,{des:’<b>1111</b>’}); </pre> des里的会被格式化掉 怎么解决 ?

格式化为

<pre> & lt;b>1121& lt;/b& gt; </pre>

6 回复

Node.js Express Render 渲染时不格式化 HTML 标签

问题描述

在使用 EJS 模板引擎时,当我们尝试在渲染过程中插入包含 HTML 标签的字符串时,这些 HTML 标签可能会被自动转义。例如,<b> 标签可能会被转义成 &lt;b&gt;,这会导致 HTML 无法正确解析和显示。

示例代码

// app.js
const express = require('express');
const app = express();
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
    const data = { des: '<b>1111</b>' };
    res.render('index', data);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
<!-- views/index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>EJS Example</title>
</head>
<body>
    <p><%= des %></p>
</body>
</html>

解决方法

EJS 默认会转义所有插入到模板中的数据以防止 XSS 攻击。但是,如果我们确定插入的数据是安全的,可以使用 <%- %> 来禁用转义功能。

<!-- views/index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>EJS Example</title>
</head>
<body>
    <p><%- des %></p>
</body>
</html>

解释

  • <%= des %>:这是默认的插入方式,会将 des 中的内容进行 HTML 转义。
  • <%- des %>:这种插入方式不会对 des 中的内容进行任何转义,直接将其作为 HTML 渲染。

通过使用 <%- des %>,我们可以确保插入的内容不会被转义,并且能够正确地解析和显示 HTML 标签。

注意事项

虽然这样可以避免标签被转义,但在实际应用中,请务必确保插入的内容是可信的,否则可能会导致 XSS 攻击。


注意使用 = - 或者 空(’ ')

同问。。我是采用的循环查找然后替换。。

十分感谢

<%- locals.user.des %> 用- 就好了,= 是使用escape格式化

在使用 EJS 模板引擎时,默认情况下,EJS 会对所有插入的内容进行 HTML 转义,以防止 XSS(跨站脚本攻击)。如果你希望在渲染时保留 HTML 标签而不被转义,可以使用 <%- %> 语法来输出内容。

以下是具体的示例:

示例代码

假设你的 index.ejs 文件内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Example</title>
</head>
<body>
    <h1><%- des %></h1>
</body>
</html>

然后在你的 Node.js 代码中使用 express.render 渲染视图:

const express = require('express');
const app = express();

app.set('view engine', 'ejs');

app.get('/', (req, res) => {
    res.render('index', { des: '<b>1111</b>' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. EJS 语法

    • <%= des %>:默认会将 des 中的内容进行 HTML 转义,例如 <b> 会被转义成 &lt;b&gt;
    • <%- des %>:不进行 HTML 转义,直接输出原始内容。因此 <b> 将保持原样。
  2. 渲染结果

    • 使用 <%- des %> 后,<b>1111</b> 将被直接输出到页面上,并且浏览器会将其解析为加粗文本。

这样设置后,你可以确保在渲染时保留 HTML 标签,而不会被格式化或转义。

回到顶部