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

PHP中如何在JSON输出中正确显示欧元符号?

解决PHP json_encode中欧元符号被转义的问题

你遇到的问题其实是json_encode的默认行为导致的:PHP默认会把所有非ASCII的UTF-8字符转换成Unicode转义序列(比如\u20ac),这也是为什么你直接echo $value->getSimbolo()能正常显示€,但JSON输出里却变成了转义字符。

最简单的修复方案(PHP 5.4+)

从PHP 5.4开始,json_encode新增了JSON_UNESCAPED_UNICODE参数,它能让函数保留原始的UTF-8字符,不进行转义。你只需要修改输出JSON的那一行代码:

echo json_encode(
    array('valorConvertido' => $value->getValor(), 'simboloMoeda' => $value->getSimbolo()),
    JSON_UNESCAPED_UNICODE
);

修改后,输出的JSON就会是:

{"valorConvertido":6,"simboloMoeda":"€"}

兼容旧PHP版本的方案(低于5.4)

如果你的PHP版本太旧(不推荐继续使用,因为已经停止维护),可以通过正则替换把转义序列还原成原始字符:

$jsonData = array('valorConvertido' => $value->getValor(), 'simboloMoeda' => $value->getSimbolo());
$json = json_encode($jsonData);
// 替换Unicode转义序列为UTF-8字符
$json = preg_replace('/\\\\u([0-9a-fA-F]{4})/', function($matches) {
    return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UTF-16BE');
}, $json);
echo $json;

额外注意事项

为了确保客户端能正确解析JSON中的欧元符号,建议在输出JSON前设置正确的响应头:

header('Content-Type: application/json; charset=utf-8');

这样就能保证整个流程中编码一致,不会出现乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:47:41