// Use DOMPurify to safely handle HTML content
// 使用 DOMPurify 安全处理 HTML 内容
import DOMPurify from 'dompurify';
// Escape HTML special characters
// 转义 HTML 特殊字符
export function escapeHTML(str) {
if (typeof str !== 'string') return '';
// 使用替换方法确保 HTML 特殊字符被转义,而不是被移除
// 这样 会变成 <java> 而不是被删除
return str.replace(/[&<>"']/g, function(c) {
return {
'&': '&', // & 转为 &
'<': '<', // < 转为 <
'>': '>', // > 转为 >
'"': '"', // " 转为 "
"'": ''' // ' 转为 '
}[c];
});
}
// Convert text to HTML, preserving line breaks
// 将文本转换为 HTML,保留换行符
export function textToHTML(text) {
if (typeof text !== 'string') return '';
// 先进行 HTML 转义,然后将换行符替换为
标签
// 最后使用 DOMPurify 确保结果是安全的 HTML
const escaped = escapeHTML(text);
const withLineBreaks = escaped.replace(/\n/g, '
');
return DOMPurify.sanitize(withLineBreaks, {
ALLOWED_TAGS: ['br'], // 只允许
标签
ALLOWED_ATTR: [], // 不允许任何属性
});
}