DataTables获取API返回HTML字符串被转义显示为纯文本如何解决?
DataTables HTML内容无法正常渲染的解决方案
核心原因
DataTables默认开启了HTML内容转义机制,所有直接绑定到列的字符串内容都会被转义为纯文本展示,避免XSS安全风险,这就是你直接看到<p>Hello</p>或转义后字符的原因。
你之前使用的Html.Raw、HttpUtility.HtmlDecode均为服务端方法,在前端初始化DataTables的配置中调用不会生效。
解决方案
方案1:直接关闭对应列的转义(最简单)
如果你的HTML来源是可信的(非用户提交的可控内容),直接在对应列配置escape: false即可:
$('#你的表格ID').DataTable({ // 其他基础配置(ajax、分页、排序等) columns: [ // 其他列的配置 { data: '返回数据中对应HTML内容的字段名', escape: false // 核心配置:关闭该列的HTML转义 } ] })
方案2:render函数手动解码(适用于API返回已转义HTML的场景)
如果你的API已经提前把HTML转义成了<p>这类格式,可以在render函数中先解码再返回:
$('#你的表格ID').DataTable({ columns: [ { data: '返回数据中对应HTML内容的字段名', render: function (data) { // HTML解码方法,兼容所有浏览器 const decodeHtml = (str) => { const temp = document.createElement('textarea'); temp.innerHTML = str; return temp.value; } return decodeHtml(data); } } ] })
常见疑问说明
你之前手动渲染a标签生效的原因是:在render函数中直接返回拼接的HTML字符串时,DataTables不会对render的返回值做默认转义,只有直接绑定data字段时才会触发默认转义逻辑。
如果担心XSS风险又要保留段落换行,可以在render函数中过滤掉危险标签,仅保留<p>、<br>、<span>等安全标签后再返回。
内容的提问来源于stack exchange,提问作者brennancodes
相关产品推荐
相关产品推荐

