PHP中JSON压缩输出核心是减少传输体积,即去除空白换行生成紧凑格式;json_encode()默认即紧凑输出,不传JSON_PRETTY_PRINT即可;真正传输压缩依赖Web服务器gzip或PHP zlib输出缓冲,而非手动字符串处理。

PHP 中 JSON 压缩输出,核心是**减少传输体积**,不是用 gzip 压缩 JSON 字符串本身(那反而会增大体积),而是指:
去除 JSON 字符串中不必要的空白、换行和缩进,生成紧凑(minified)格式。这是标准且最有效的“JSON 压缩”做法。
使用 json_encode() 的 JSON_UNESCAPED_UNICODE 和 JSON_UNESCAPED_SLASHES 等标志
PHP 5.4+ 的 json_encode() 默认就输出紧凑格式(无空格、无换行)。只要不传 JSON_PRETTY_PRINT,就是“压缩”状态:
- ✅ 正确(紧凑输出):
echo json_encode($data); - ❌ 错误(人为“膨胀”):
echo json_encode($data, JSON_PRETTY_PRINT);
如需进一步优化(比如中文不转义、斜杠不转义),可叠加常用标志:
立即学习“PHP免费学习笔记(深入)”;
// 紧凑 + 中文原样 + 斜杠不转义
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// 输出:{"name":"张三","url":"https://example.com/path"}
?>
确保响应头设置正确(配合浏览器 gzip)
真正的网络传输压缩,靠的是 Web 服务器(如 Nginx/Apache)或 PHP 启用的 gzip/deflate 压缩,不是 PHP 手动压缩 JSON 字符串。务必确认:
- 服务器已开启 gzip(推荐优先级最高)
- 或 PHP 中启用输出缓冲 + zlib:在脚本开头加
ob_start('ob_gzhandler');(仅当无法改服务器配置时用) - 发送正确的 Content-Type:
header('Content-Type: application/json; charset=utf-8');
避免手动“字符串压缩”(如正则删空格)
不要用 str_replace 或 preg_replace 去除 JSON 中的空格——这极易破坏合法内容(如字符串值含空格、换行),导致 JSON 解析失败。例如:
$json = json_encode($data, JSON_PRETTY_PRINT);
$json = preg_replace('/\s+/', '', $json); // 可能删掉 "hello world" 里的空格 → "helloworld"
这种操作不可靠,完全没必要。交给 json_encode() 默认行为即可。
小技巧:开发时想看格式化,生产环境自动紧凑
可通过环境变量或常量控制:
$is_debug = defined('DEBUG') && DEBUG;$options = JSON_UNESCAPED_UNICODE;
if ($is_debug) {
$options |= JSON_PRETTY_PRINT | JSON_UNESCAPED_LINE_TERMINATORS;
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data, $options);
?>



















