You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 13服务端如何清理HTML?已尝试方案仍显示标签

Next.js 13 服务端清理HTML后仍显示标签的解决方法

问题核心在于React的默认转义行为:React会把字符串中的HTML标签当作普通文本处理,直接渲染sanitizeHtml返回的字符串时,标签不会被解析成对应的HTML元素,只会原样显示。

解决方式是使用React的dangerouslySetInnerHTML属性,它允许将处理后的HTML内容直接插入DOM中。修改代码如下:

替换原代码中的:

{sanitizeHtml(item.tekst)}

为:

<div dangerouslySetInnerHTML={{ __html: sanitizeHtml(item.tekst) }} />

完整修改后的代码:

import getData from '../../../firebase/firestore/getData';
import sanitizeHtml from 'sanitize-html';

export default async function Jbpregled() {
const data = await getData();

return (
    <div className="mt-4">
        <div className="px-4 sm:px-8 max-w-5xl m-auto">
            <h1 className="text-center font-semibold text-sm">Javne nabavke:</h1>
            <ul className="border border-gray-200 rounded overflow-hidden shadow-md">

                {data.map(item => <li key={item.id} className="px-4 py-2 bg-white hover:bg-sky-100 hover:text-sky-900 border-b last:border-none border-gray-200 transition-all duration-300 ease-in-out">
                    <div dangerouslySetInnerHTML={{ __html: sanitizeHtml(item.tekst) }} />
                </li>)}
            </ul>

        </div>
    </div>

)
}

注意:dangerouslySetInnerHTML的命名是为了提醒开发者注意XSS风险,但你已经通过sanitizeHtml完成了HTML清理,只要数据源可信,就能有效规避风险。

内容的提问来源于stack exchange,提问作者Viktor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:33:21