使用 json_hex_tag、json_hex_apos、json_hex_quot 和 json_hex_amp 标志组合调用 json_encode(),将 html 敏感字符转义为 unicode 实体,从而防止 xss。

哪些字符会被转义
默认情况下 json_encode() 只转义反斜杠和引号。开启上述四个标志后,小于号 变为 \u003c,大于号 > 变为 \u003e,单引号 ' 变为 \u0027,与符号 & 变为 \u0026。这些实体在浏览器中显示为原字符,但不会触发 HTML 解析或脚本执行。

{
"name": "<script>alert(1)</script>",
"link": "http://example.com?a=1&b=2",
"quote": "It's a \"test\""
}
预期输出:
{
"name": "\u003cscript\u003ealert(1)\u003c\/script\u003e",
"link": "http:\/\/example.com?a=1\u0026b=2",
"quote": "It\u0027s a \u0022test\u0022"
}
如何正确嵌入到HTML中
将转义后的 JSON 字符串放入 <script></script> 标签时,必须确保其作为 JavaScript 对象或数组的一部分被解析。直接输出字符串需包裹在引号内,或使用 <script>var data = {{json}};</script> 形式。由于 \u003c 等实体在 JS 中是合法字符,浏览器不会将其解释为 HTML 标签,从而阻断 XSS。
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

<script>
var userData = {
name: "<script>alert(1)</script>",
link: "http://example.com?a=1&b=2"
};
对比输出:
<script>
var userData = {
name: "\u003cscript\u003ealert(1)\u003c\/script\u003e",
link: "http:\/\/example.com?a=1\u0026b=2"
};
</script>
未启用转义标志时的风险
若未使用 JSON_HEX_TAG 等标志, 和 > 会原样输出。当该 JSON 字符串被插入到 HTML 页面且未正确引用时,浏览器可能将其解析为 HTML 标签,导致脚本执行。例如,若直接将 json_encode($data) 结果放入 ,攻击者可注入 等 payload。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










