json_encode 无法处理 PDO 获取的数据
json_encode not working on PDO fetched data
我在这里晾干。用户点击 select 列表中的一个选项,然后 jQuery 向服务器发送一个 xhr 进行处理,这里没有什么特别的,代码运行完美(firebug 显示正确 Post编辑数据)。
然后一个简单的代码从 W_id == $val
的数据库中提取 return 行,然后在 $result
中获取结果,然后将结果回显为 json 响应:
public function getCities($val) {
$sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id");
$sth->execute(array(':w_id' => $val));
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
//print_r($result);
header("content-type:application/json");
echo json_encode($result);
}
Firebug 显示 Post 数据但没有响应。但是当我取消注释 print_r
时,它会显示一个数组作为响应:
Array(
[0] => Array(
[id] => 1401
[name] => Aïn Bouchekif
)
[1] => Array(
[id] => 1402
[name] => Aïn Deheb
)
[2] => Array(
[id] => 1403
[name] => Aïn El Hadid
) and so on...
这意味着有些结果可以 returned,但我不知道如何 jsonify 它们。感谢任何帮助,谢谢。
我认为这是一个编码问题,你可以使用json_last_error()来验证这个想法。您可以将 charset=utf-8
添加到 header :
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
//print_r($result);
header("Content-type: application/json; charset=utf-8"); // <-- Here
echo json_encode($result);
echo json_last_error(); // <-- Here
以下是对我有用的方法:
UTF-8 character encoding battles json_encode()
public function getCities($val) {
$sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id");
$sth->execute(array(':w_id' => $val));
header("Content-type: application/json; charset=utf-8");
$rows = array();
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
$rows[] = array_map('utf8_encode', $row);
}
echo json_encode($rows);
}
我在这里找到了其他答案 How to json_encode array with french accents? 但一直收到通知,发现非法字符。
我在这里晾干。用户点击 select 列表中的一个选项,然后 jQuery 向服务器发送一个 xhr 进行处理,这里没有什么特别的,代码运行完美(firebug 显示正确 Post编辑数据)。
然后一个简单的代码从 W_id == $val
的数据库中提取 return 行,然后在 $result
中获取结果,然后将结果回显为 json 响应:
public function getCities($val) {
$sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id");
$sth->execute(array(':w_id' => $val));
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
//print_r($result);
header("content-type:application/json");
echo json_encode($result);
}
Firebug 显示 Post 数据但没有响应。但是当我取消注释 print_r
时,它会显示一个数组作为响应:
Array(
[0] => Array(
[id] => 1401
[name] => Aïn Bouchekif
)
[1] => Array(
[id] => 1402
[name] => Aïn Deheb
)
[2] => Array(
[id] => 1403
[name] => Aïn El Hadid
) and so on...
这意味着有些结果可以 returned,但我不知道如何 jsonify 它们。感谢任何帮助,谢谢。
我认为这是一个编码问题,你可以使用json_last_error()来验证这个想法。您可以将 charset=utf-8
添加到 header :
$result = $sth->fetchAll(PDO::FETCH_ASSOC);
//print_r($result);
header("Content-type: application/json; charset=utf-8"); // <-- Here
echo json_encode($result);
echo json_last_error(); // <-- Here
以下是对我有用的方法: UTF-8 character encoding battles json_encode()
public function getCities($val) {
$sth = $this->db->prepare("SELECT id, name FROM cities WHERE w_id = :w_id");
$sth->execute(array(':w_id' => $val));
header("Content-type: application/json; charset=utf-8");
$rows = array();
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
$rows[] = array_map('utf8_encode', $row);
}
echo json_encode($rows);
}
我在这里找到了其他答案 How to json_encode array with french accents? 但一直收到通知,发现非法字符。