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>
Node.js Express Render 渲染时不格式化 HTML 标签
问题描述
在使用 EJS 模板引擎时,当我们尝试在渲染过程中插入包含 HTML 标签的字符串时,这些 HTML 标签可能会被自动转义。例如,<b>
标签可能会被转义成 <b>
,这会导致 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');
});
解释
-
EJS 语法:
<%= des %>
:默认会将des
中的内容进行 HTML 转义,例如<b>
会被转义成<b>
。<%- des %>
:不进行 HTML 转义,直接输出原始内容。因此<b>
将保持原样。
-
渲染结果:
- 使用
<%- des %>
后,<b>1111</b>
将被直接输出到页面上,并且浏览器会将其解析为加粗文本。
- 使用
这样设置后,你可以确保在渲染时保留 HTML 标签,而不会被格式化或转义。