在php中解析带有葡萄牙语字符的数组时出现json_encode问题

时间:2014-05-14 10:30:25

标签: php web-services json

我的结果数组如下

$array = array(array('nome'=>'Paição','cidade'=>'São Paulo'),array('nome'=>'Paição','cidade'=>'São Paulo'));

当我用php中的json_encode编码相同的数组时,它不会像数组一样返回它返回如下json string

$json = json_encode($array);
$result = [{"nome":"Pai\u00e7\u00e3o","cidade":"S\u00e3o Paulo"},{"nome":"Pai\u00e7\u00e3o","cidade":"S\u00e3o Paulo"}]

请有人知道将此数组转换为php中的相同字符

谢谢,

3 个答案:

答案 0 :(得分:2)

在json_encode中使用JSON_UNESCAPED_SLASHES

这样做

<?php
$array = array(array('nome'=>'Paição','cidade'=>'São Paulo'),array('nome'=>'Paição','cidade'=>'São Paulo'));
$json = json_encode($array,JSON_UNESCAPED_UNICODE);
echo $json;

答案 1 :(得分:0)

我找到了使用5.4以下php版本的解决方案,

$arr = array(array('nome'=>'Paição','cidade'=>'São Paulo'),array('nome'=>'Paição','cidade'=>'São Paulo'));

$array = preg_replace("/\\\\u([a-f0-9]{4})/e", "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$1')))", json_encode($arr));

上述结果与传递值相同

[{"nome":"Paição","cidade":"São Paulo"},{"nome":"Paição","cidade":"São Paulo"}]

你还必须设置mysql_query(“SET NAMES utf8”);在mysql连接之后。

答案 2 :(得分:0)

尝试使用此函数包装整个json_encode():

utf8_encode(json_encode());

另一方面,如果你正在做的是从mysql发送和解析数据,你应该定义与utf8的连接:

$conn=  mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
mysqli_set_charset($conn,'utf8');