我正在尝试作为ajax响应返回原始html,这是返回响应的函数:
res.render('partial/messages', {
successMsg: 'An email has been sent to you.' +
'<a href="' + req.headers.host + '/user/resendToken?email=' + user.email + '">Send Again.</a>',
layout: false
}, function (err, list) {
res.set('Content-Type', 'text/html');
res.status(200).send({ msg: list });
});
局部视图message
包含以下内容:
<% if(successMsg != ''){ %>
<div class="alert alert-success alert-dismissible fade show" role="alert">
<%= successMsg %>
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<% } %>
ajax响应是:
"
<div class="alert alert-success alert-dismissible fade show" role="alert">
An email has been sent to you.`<a href="127.0.0.1:3000/user/[email protected]">Send Again.</a>`
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
"
为什么<a href
标签是渲染&alt;
?
我该如何解决这个问题?
&alt;
是与<
对应的HTML实体。这用于防止代码注入。
当您使用<%= something %>
语法包含字符串时,EJS正在进行转换。
要防止它,请使用<%- something %>
语法。
请记住,不转义这些字符可能会使您的服务暴露于XSS攻击。
因为<%= ... %>
逃脱了HTML。如果您确定可以信任user.email
和其他用户生成的数据,则可以使用<%- successMsg %>
代替,这不会逃脱HTML。
您可以在Docs section of EJS here中阅读有关标签的更多信息。