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
相关产品推荐
相关产品推荐

