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

Astro中Prismic asHTML()渲染富文本时HTML被转义问题

问题原因

Astro 框架默认会对模板中通过 {} 插值语法输出的所有字符串做 HTML 特殊字符转义,这是框架内置的XSS安全防护机制,和 @prismicio/helpers 的 asHTML 方法逻辑无关。
你通过 asHTML 拿到的富文本转换结果本身是完全符合预期的,只是转义逻辑把字符串里的 <、> 等标签符号转换成了HTML实体,最终才会在页面上直接显示HTML源码,而不是解析渲染成对应的DOM结构。
另外你贴的模板代码里还有一处笔误:{textItem1) 的右侧闭合符号写错成了小括号,应该是大括号 },这个也需要修正。

解决方法

不需要调整Prismic相关的配置,直接用Astro内置的 set:html 指令渲染转换后的HTML字符串即可,这个指令会明确告知框架跳过对指定内容的转义逻辑,直接将原始HTML插入到对应元素内部。
具体写法如下:

---
// 前置数据拉取逻辑保持不变即可
import Layout from '../layouts/Layout.astro';
import * as prismicH from '@prismicio/helpers';
import {getFrontPage} from '../prismic.js';

const fp = await getFrontPage();
const {data} = fp.results[0];

const headerText = prismicH.asHTML(data.header_text);
const textItem1 = prismicH.asHTML(data.text_item_1);
---
<Layout>
  <!-- 用set:html绑定富文本内容 -->
  <div set:html={headerText}></div>
  <div set:html={textItem1}></div>
</Layout>

注意:set:html 等同于其他框架里的v-html、dangerouslySetInnerHTML,只应该用来渲染你完全信任的内容(比如你自己从Prismic后台管控的富文本内容),不要用它渲染不可信的用户提交内容,避免XSS风险。

如果后续你的Prismic富文本里需要自定义链接解析、嵌入块渲染等复杂逻辑,也可以使用Prismic官方提供的Astro专属富文本渲染组件,不过当前你这个无额外配置的场景,直接用set:html就足够满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 11:01:06