dangerouslySetInnerHTML
是 React 中的一个属性,它允许你直接将 HTML 字符串插入到 DOM 中。这个属性通常用于渲染从外部源获取的 HTML 内容,例如 CMS 系统或用户生成的内容。然而,使用 dangerouslySetInnerHTML
需要特别小心,因为它可能会导致跨站脚本攻击(XSS)。
dangerouslySetInnerHTML
是一个 React 属性,用于设置组件的 innerHTML
。它的使用方式如下:
function MyComponent({ htmlContent }) {
return <div dangerouslySetInnerHTML={{ __html: htmlContent }} />;
}
问题描述:使用 dangerouslySetInnerHTML
时,可能会遇到内容显示不正确的情况,比如多读或少读了某些字符。
原因分析:
<
, >
, &
等,如果没有正确转义,会导致解析错误。解决方法:
DOMPurify
来清理 HTML 内容,去除潜在的恶意脚本。import DOMPurify from 'dompurify';
function MyComponent({ htmlContent }) {
const cleanHtml = DOMPurify.sanitize(htmlContent);
return <div dangerouslySetInnerHTML={{ __html: cleanHtml }} />;
}
以下是一个完整的示例,展示了如何安全地使用 dangerouslySetInnerHTML
:
import React from 'react';
import DOMPurify from 'dompurify';
function MyComponent({ htmlContent }) {
// 清理 HTML 内容
const cleanHtml = DOMPurify.sanitize(htmlContent);
return (
<div>
<h1>安全渲染 HTML 内容</h1>
<div dangerouslySetInnerHTML={{ __html: cleanHtml }} />
</div>
);
}
export default MyComponent;
通过这种方式,可以有效避免因 HTML 内容不安全或格式错误导致的多读或少读问题。
领取专属 10元无门槛券
手把手带您无忧上云