You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP:json_encode写入文件时如何显示变音符号而非转义码?

解决JSON写入文件时变音符号被转义的问题

你遇到的核心问题是json_encode默认会转义UTF-8编码的特殊字符(比如德语变音符号ä、ü这些),导致写入文件后显示成转义形式,而不是正常的字符。之前用utf8_encode没效果,大概率是因为你的字符串本身已经是UTF-8编码了,再转一次反而起反作用。

下面是具体的解决步骤和代码示例:

关键解决方案:修改json_encode的参数

PHP的json_encode函数有个专门的常量JSON_UNESCAPED_UNICODE,作用就是让UTF-8字符保持原样,不被转义。把它作为第二个参数传入即可:

// 假设$post是你要写入的内容
fwrite($fp, json_encode($post, JSON_UNESCAPED_UNICODE));

如果需要让生成的JSON更易读(格式化输出),还可以搭配JSON_PRETTY_PRINT常量,用管道符|组合多个参数:

fwrite($fp, json_encode($post, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

为什么utf8_encode没用?

utf8_encode的作用是把ISO-8859-1(Latin-1)编码的字符串转换成UTF-8。如果你的原字符串已经是UTF-8编码(比如从API拿到的JSON本身就是UTF-8的),再用这个函数会把字符串转成乱码或者无效编码,自然解决不了转义问题。

你可以先检测一下字符串的编码,确认是不是UTF-8:

$string = "Außenministerium verhängte Reisewarnung für Kroatien in Kraft getreten.";
echo mb_detect_encoding($string); // 输出UTF-8就说明不需要转码

完整示例代码

// 假设从API获取到的内容已经是UTF-8编码的字符串
$apiResponse = '{"content":"Außenministerium verhängte Reisewarnung für Kroatien in Kraft getreten."}';
$post = json_decode($apiResponse, true);

// 打开文件(注意用"w"模式时要确保文件权限正确)
$fp = fopen('output.json', 'w');
if ($fp) {
    // 用JSON_UNESCAPED_UNICODE参数写入
    fwrite($fp, json_encode($post, JSON_UNESCAPED_UNICODE));
    fclose($fp);
}

这样写入文件后,里面的变音符号就会正常显示成Außenministerium,而不是转义后的形式啦。

内容的提问来源于stack exchange,提问作者Osvald Laurits

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 20:27:45