
本文详解如何正确将动态生成的 html 字符串(如患者信息表格)作为字段值嵌入 json 响应,避免因手动拼接、未转义或编码不当导致的 json 格式错误。核心方案是全程使用 json_encode() 自动处理转义,禁用字符串拼接构造 json。
在 Web 开发中,常需将 HTML 片段(例如患者档案表格)作为数据字段返回给前端(如用于弹窗渲染或富文本展示)。但若直接将 HTML 字符串赋值给数组再 json_encode(),却仍出现 JSON 解析失败(如在 JSON Formatter 中报错),往往是因为:
- ✅ HTML 字符串本身含换行符(\n)、制表符(\t)、斜杠(/)或双引号(")等特殊字符;
- ❌ 手动拼接 JSON 字符串(如 '{"entities": ' . $jasondata . '}')极易破坏结构,且无法保证内部字符串的 JSON 合法性;
- ⚠️ 未对数据库查询做参数化处理,存在 SQL 注入风险。
正确做法:全链路交由 json_encode() 处理
PHP 的 json_encode() 默认会对字符串中的特殊字符(包括 , /, \n, \t, ", ' 等)自动进行 JSON 转义(如 "你唯一需要做的,是把所有数据组织成 PHP 关联数组,然后一次性 encode。
以下是重构后的完整示例:
// ✅ 安全读取 HTML(保持原逻辑,仅优化可读性)
function patient_file() {
return '| Fullname | salum said juma |
| Age / sex | 12 male |
| Address | kariakoo dsm |
| File number | mn234 |
| kitu package | scheme name |
| kitu number | 1234567890 |
| kiyutu | 1919181716151 |
| hihi in | 12-03-2023 |
| hihi out | 12-03-2023 |
关键注意事项
- 禁止字符串拼接 JSON:'{"entities": ' . $jasondata . '}' 是高危操作,即使 $jasondata 已 encode,外层手动拼接仍可能引入非法空白或引号冲突。
- 启用 JSON_UNESCAPED_UNICODE:避免中文被转为 \uXXXX,提升可读性与调试效率。
- 启用 JSON_UNESCAPED_SLASHES:防止 HTML 中的 / 被转义为 \/(虽合法但冗余)。
- SQL 安全必须前置:无论输入是否可信,$_POST['folio'] 都须通过预处理语句或强类型转换过滤。
-
验证输出:用 json_last_error() 检查编码结果:
if (json_last_error() !== JSON_ERROR_NONE) { error_log('JSON encode failed: ' . json_last_error_msg()); http_response_code(500); exit; }
遵循以上模式,你的 HTML 字符串将被安全、透明地嵌入 JSON,前端可直接解析 response.entities[0].cardata 并插入 DOM(注意使用 innerHTML 或框架的安全渲染机制),彻底规避格式错误与注入风险。
立即学习“前端免费学习笔记(深入)”;











