json返回损坏的数据

时间:2012-12-16 18:25:33

标签: php mysql json character-encoding

我正在玩一个只从我的数据库读取的api并以json格式返回数据。

在phpMyAdmin中,句子是完美的(我使用utf8_general输入csv)。例如:

    A line that uses 'r and special chars etc

但是当我回应json时,我明白了:

    A line that uses ///\\/\/\/r and special chars etc

首先我得到了null对象,所以我使用了:

   mysql_set_charset('utf8', $link);

但我仍然会收到损坏的数据。

更新

更多信息:

mysql_set_charset('utf8',$link);

/* grab the posts from the db */
$query = "SELECT * FROM huren WHERE 1";

$result = mysql_query($query,$link) or die('Errant query:  '.$query);

// check row count 
$amount = mysql_num_rows($result);

/* create one master array of the records */
$houses = array();
if(mysql_num_rows($result)) {
    while($post = mysql_fetch_assoc($result)) {
        $houses[] = $post;
    }
}

/* output in necessary format */

    header('Content-type: application/json');
 $changed_json= str_replace('\\/', '/',json_encode(array('House'=>$houses)));
echo str_replace('\\\\', '\\',$changed_json);

2 个答案:

答案 0 :(得分:3)

更换操作有什么用? json_encode要么返回表示您给出的确切输入的完全有效的JSON,要么返回NULL,因为存在诸如您的数据不是UTF-8的问题。你不应该对json_encode返回的字符串做任何事情!如果你没有得到NULL,那么你就赢了,只需要回应它。

它只适用于此:

header('Content-type: application/json');
echo json_encode(array('House'=>$houses));

charset并不重要,因为默认情况下,json_encode会生成纯ASCII输出。这是因为默认情况下,unicode字符以unicode转义序列表示,例如\uxxxx

答案 1 :(得分:0)

请再给我们一点。你能告诉我们编码字符串的部分吗?

这似乎是独立的,因此必须与其他地方进行一些复杂的互动。

<?php // RAY_temp_foo.php
error_reporting(E_ALL);
echo '<pre>';

$str = <<<END
A line that uses 'r and special chars etc
END;

$jso = json_encode($str);
$new = json_decode($jso);

// THESE SHOULD MATCH
var_dump($str);
var_dump($new);

echo PHP_EOL;
var_dump($jso);