PHP mysqli_query转换为JSON excape特殊字符

时间:2015-12-09 12:21:23

标签: php mysql json

全部,我在php中有以下代码,我想从mysql中选择数据并放入json_encode。如果它包含单引号等,则失败。

// get the notes if any
$notes = array();
$result = mysqli_query($con, "SELECT id, notes FROM tc_ssa_notes WHERE ssa_id = " . mysqli_real_escape_string($con, $ssa_id));
while ($row = mysqli_fetch_assoc($result))
    {
        $notes[] = $row;
}
mysqli_free_result($result);

#en: send data packaged in json array
echo json_encode(array('notes' => $notes));

var_dump( $notes );的输出:

array(4) {
    [0] => array(2) {
        ["id"] => string(2) "26" ["item"] => string(55) "Are electrical panels covered when not being worked on?"
    } [1] => array(2) {
        ["id"] => string(2) "28" ["item"] => string(38) "Are extension cords in good condition?"
    } [2] => array(2) {
        ["id"] => string(2) "27" ["item"] => string(39) "B. Are (GFCI�S) in use (If Applicable)?"
    } [3] => array(2) {
        ["id"] => string(2) "29" ["item"] => string(53) "Is GFCI on the generator operational? (If applicable)"
    }
}

1 个答案:

答案 0 :(得分:0)

由于您的示例输出,我猜您使用错误的编码(至少对于json_encode)写入数据库,可能是ISO-8859-1或其他格式。

json_encode()仅适用于UTF-8。来自文档:

  

所有字符串数据必须采用UTF-8编码。

长期解决方案是在数据库中使用UTF-8作为charset / collat​​ion,这里有一个good answer,其中包含一些资源。

短期(quickfix)可能是将您的字符串转换为UTF-8(utf8_encode())。如果你的字符串是ISO-8859-1编码的,你可以用下面的循环替换你的while循环:

unset($_SESSION['your_session_variable_name']);

另外,为了调试json错误,您可以使用下面的内置函数(取决于PHP版本):