全部,我在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)"
}
}
答案 0 :(得分:0)
由于您的示例输出,我猜您使用错误的编码(至少对于json_encode)写入数据库,可能是ISO-8859-1或其他格式。
json_encode()仅适用于UTF-8。来自文档:
所有字符串数据必须采用UTF-8编码。
长期解决方案是在数据库中使用UTF-8作为charset / collation,这里有一个good answer,其中包含一些资源。
短期(quickfix)可能是将您的字符串转换为UTF-8(utf8_encode())。如果你的字符串是ISO-8859-1编码的,你可以用下面的循环替换你的while循环:
unset($_SESSION['your_session_variable_name']);
另外,为了调试json错误,您可以使用下面的内置函数(取决于PHP版本):