1

我正在使用一个 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

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

   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);
4

2 回答 2

3

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

它只适用于此:

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

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

于 2012-12-16T19:21:55.107 回答
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);
于 2012-12-16T18:29:20.777 回答