Phalcon 4调用getJsonRawBody获取JSON参数时日期出现转义斜杠问题求解
问题产生原因
- PHP 内置的
json_encode()函数默认开启了正斜杠转义规则,会自动把/转换为\/,该设计是为了兼容 JSON 嵌入 HTML<script>标签的场景,避免特殊标签导致解析异常。 - 你返回完整
$body对象时看到的日期格式正常属于调试工具的展示优化:实际原始响应的 JSON 中斜杠仍然是转义状态,Chrome 开发者工具、Postman 这类工具会默认把转义后的\/还原为/展示,只有查看原始响应内容才能看到转义字符。
解决方案
有两种常用方案可以避免斜杠转义:
- 手动给
json_encode()添加不转义斜杠参数
调用json_encode时传入第二个参数JSON_UNESCAPED_SLASHES即可关闭斜杠转义逻辑,修改后代码如下:
public function post(): ResponseInterface { $this->view->disable(); $body = $this->request->getJsonRawBody(); return $this->response->setStatusCode(502)->setContent(json_encode($body->birthday, JSON_UNESCAPED_SLASHES)); }
- (更推荐)使用 Phalcon 内置的 JSON 响应方法
Phalcon 提供的setJsonContent()方法已经默认配置了符合常用场景的 JSON 编码规则,默认关闭斜杠转义,同时会自动设置Content-Type: application/json响应头,不需要手动调用json_encode:
public function post(): ResponseInterface { $this->view->disable(); $body = $this->request->getJsonRawBody(); return $this->response->setStatusCode(502)->setJsonContent($body->birthday); }
内容的提问来源于stack exchange,提问作者Luca95
相关产品推荐
相关产品推荐

