我正在玩一个只从我的数据库读取的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);
答案 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);