我使用DOMPurify来净化我的HTML内容。一切工作正常,但当我使用字符<
和>
时,它被转换为<
和>
例如:We have <a>Tea</a> // Outputs: We have Tea
例如:Use '<' and '>' to compare values // Outputs: Use '<' and '>' to compare values
问题是第二个例子。我想把它显示为<
而不是%lt;
所以我唯一的选择是在通过DOMPurify之后执行一个字符串替换,用<
和>
替换<
和>
。还有其他选择吗?
好吧,我有类似的情况,我的字段的值,如<img onload="alert('hacked') />
将转向<img>
,<p> Testing </p>
将转向<p> Testing </p>
,但Test < Test2
将转向Test < Test
。解决方案:取Dompuriy返回的值,找到< and >
并将其替换为< and >
;注意,此解决方案可能需要在安全性方面进行一些权衡。下面是函数:
export const convertHtmlEntityToAngleBrackets = (fieldText) => {
const htmlEntities = /&(lt|gt);/
const isHtmlEntityUsed = htmlEntities.test(fieldText)
if (isHtmlEntityUsed) {
return fieldText.replace(/</g, '<').replace(/>/g, '>')
} else {
return fieldText
}
}
dangerouslySetInnerHTML
<div dangerouslySetInnerHTML={{ __html: renderValue() }} />
(信用:@Bergi