
本文讲解如何将 PHP 数组经 json_encode() 生成的标准 JSON 字符串(含双引号)转换为外观上使用单引号包裹字符串的格式,强调该操作仅改变字符串表现形式,不改变数组本身,且结果不再符合 JSON 规范。
本文讲解如何将 php 数组经 `json_encode()` 生成的标准 json 字符串(含双引号)转换为外观上使用单引号包裹字符串的格式,强调该操作仅改变字符串表现形式,不改变数组本身,且结果不再符合 json 规范。
在 PHP 开发中,有时出于调试、日志输出或与特定前端脚本(非标准 JSON 解析器)兼容等临时需求,开发者希望将 json_encode() 生成的 JSON 字符串中的双引号 "string" 替换为单引号 'string',例如将:
["1660109707.jpg","1660109715.png","1660201812.jpg"]
转换为视觉上更接近 PHP 原生数组字面量的格式:
['1660109707.jpg','1660109715.png','1660201812.jpg']
⚠️ 重要前提:这不是对 JSON 数据的合法修改——根据 RFC 8259,JSON 标准强制要求字符串必须使用双引号(")界定,单引号(')是无效语法。因此,替换后的字符串不可被 json_decode() 正确解析,也不应作为 API 响应或跨系统数据交换格式使用。
✅ 正确实现方式是:先 json_encode(),再对结果字符串执行全局双引号 → 单引号替换。示例代码如下:
立即学习“PHP免费学习笔记(深入)”;
$arr = ["1660109707.jpg", "1660109715.png", "1660201812.jpg", "1660201843.jpg", "1660208040.jpg"];
// 1. 序列化为标准 JSON 字符串(含双引号)
$json = json_encode($arr); // → '["1660109707.jpg","1660109715.png",...]'
// 2. 将所有双引号替换为单引号(注意:需转义双引号模式)
$quotedWithSingle = str_replace('"', "'", $json); // → "['1660109707.jpg','1660109715.png',...]"
dd($quotedWithSingle);
// 输出:['1660109707.jpg','1660109715.png','1660201812.jpg','1660201843.jpg','1660208040.jpg']? 补充说明:
- 原问题中在
foreach内对每个元素调用trim($ar, '"')和str_replace('"', "'")是无效的,因为$ar是纯 PHP 字符串值(不含引号),trim()不起作用;引号只存在于json_encode()的输出中。 - 若数组元素本身包含单引号(如
"O'Reilly.pdf"),直接str_replace('"', "'")会导致语法错误(如'O'Reilly.pdf')。此时需额外处理(如先addslashes()或改用var_export()),但已超出本例范围。 - 实际开发中,若目标是生成可执行的 PHP 代码,推荐使用
var_export($arr, true),它原生支持单引号并自动转义,输出安全、可 eval 的 PHP 字面量。
? 最后提醒:PHP 数组本身完全不区分单/双引号定义方式 —— ['a'] 与 ["a"] 在运行时完全等价:
var_dump(['a'] === ["a"]); // bool(true)
因此,除非明确需要字符串层面的格式呈现,否则无需进行此类替换。优先保证数据合法性与互操作性。



















