json_encode() возвращает null для специальных символов

Я знаю, что есть много вопросов по этому поводу. Я пробовал много вещей, но я не мог это исправить. Возможно, мне не удалось выполнить решения из-за моих ограниченных знаний?

Я выбираю данные из базы данных mysql и использую для них функцию json_encode(). Это работает, за исключением данных, содержащих специальные символы (турецкий). Для этих значений json возвращает null. Как я могу это исправить?

Вот мой простой php-код:

<?php

require('init.php');

$sql="SELECT * FROM tablename;";

$result=mysqli_query($con,$sql);
$response=array();

while($row=mysqli_fetch_array($result)){


array_push($response,array("X"=>$row["x"],"Y"=>$row["y"]));

}

echo json_encode($response);


?>

в mysql столбцы установлены на utf8-turkish. Я пробовал такие вещи, как установка заголовков, вызов некоторых функций, воссоздание файлов php в кодировке utf8 и т. д., но ничего не сработало.


person Community    schedule 02.08.2016    source источник
comment
Возможный дубликат функции json_encode: специальные символы   -  person scrowler    schedule 03.08.2016
comment
Вы установили кодировку mysqli php.net/manual/en/mysqli.set- charset.php   -  person RiggsFolly    schedule 03.08.2016
comment
Привет, Риггс. нет, я еще не пробовал. Нужно ли мне писать это в моем сценарии подключения (init.php)?   -  person    schedule 03.08.2016
comment
Риггс Я использовал его сейчас. Для специального символа вместо нулевого значения я получаю следующее: =6. Значит ли это, что это сработало?   -  person    schedule 03.08.2016


Ответы (2)


Использование функции mysqli_set_charset в моем сценарии подключения решило проблему. По похожим вопросам не нашел. Спасибо пользователю "RiggsFolly".

person Community    schedule 02.08.2016

Добавьте TRUE: json_decode($string, TRUE); Это даст вам символы utf8 вместо управляющих последовательностей Unicode (например, \u00d6).

Вам нужно utf8 (или utf8mb4) в соединении, в таблице и в html. См. это.

person Rick James    schedule 03.08.2016