Почему JSON неверен, когда в базе данных есть специальный символ?
У меня проблема с JSON, сгенерированным в CodeIgniter с сервером REST, подключенным к базе данных MS-Access.
Если в моей базе данных есть только обычные символы, JSON, сгенерированный на остальном сервере, работает нормально, но если в базе данных есть специальный символ (например: Ø, "и т. Д.), Сгенерированный JSON недопустим и отображает только пустой экран. Я думаю, что код правильный, и кодировка установлена на UTF8 при подключении базы данных MS-Access.
Я использую для проверки JSON: POSTMAN, Firefox и Chrome
Это мой код для генерации JSON (я думаю, что код в порядке, потому что работает нормально (иногда..)
public function list_minimos_get(){
$query = $this->db->query("SELECT F_STO.ARTSTO, F_ART.DESART, F_ART.EQUART, F_STO.MINSTO, F_STO.ACTSTO
FROM (F_STO
LEFT JOIN F_ART ON F_STO.ARTSTO = F_ART.CODART)
WHERE F_STO.ACTSTO<F_STO.MINSTO
AND F_STO.ARTSTO LIKE 'T%';
");
$respuesta = array(
'error' => FALSE,
'stock' => $query->result_array()
);
$this->response($respuesta);
}
Я могу изменить что-нибудь, чтобы это нормально работало? Я думаю, что проблема в ответе, но я не имею ни малейшего представления, чтобы это исправить...
Отредактированная часть
Я не понимаю, если я изменить ответ на "Ø" тип непосредственно в коде PHP, работает нормально.
Если я использую ISO-8859-15, у меня странный ответ, на этом изображении вы видите в правой части символ ОК (ответ, но ошибка та же), в верхней части символ не ОК (var_dump) и пометил в PINK ошибку:
Если я использую Chrome с плагином для изменения кодировки, var_dump отлично работает в кодировке ISO-8859-15, но ответ не работает.
Я изменяю UTF-8 на ISO-8859-15 во всем проекте, но не работаю...
Я ничего не понимаю...
Заранее спасибо.
1 ответ
Попробуй так
$response = array('error' => FALSE,'stock' => $query->result_array());
$this->output
->set_status_header(200)
->set_content_type('application/json', 'utf-8')
->set_output(json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES))
->_display();
exit;