Всем привет! Столкнулся с проблемой, что при выгрузке данных из базы и конвертации их в json получаю ошибку "Malformed UTF-8 characters, possibly incorrectly encoded"
. Решил её следующей функцией:
public static function convert_from_latin1_to_utf8_recursively($data)
{
if (is_string($data))
return utf8_encode($data);
if (!is_array($data))
return $data;
$patched_data = array();
foreach ($data as $index => $value)
$patched_data[$index] = self::convert_from_latin1_to_utf8_recursively($value);
return $patched_data;
}
Но столкнулся со следующей проблемой, при показе данных они выглядят следующим образом:
На странице выставлено: <meta charset="utf-8">
Структура таблицы следующая:
Некоторые записи из базы:
Я не совсем понимаю, что не так, у меня есть подозрение, что данные, которые добавляются в базу, добавляются не в той кодировке. Данные добавляются пользователями, вручную.
Добавление происходит через эту функцию:
public static function create($project, $title, $type)
{
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$connection) {
return false;
}
$query = "INSERT INTO reports(creation_date, project, title, creator, type, status, link) VALUES ("
. mysqli_real_escape_string($connection, 'now()') . ", "
. "'" . mysqli_real_escape_string($connection, $project) . "'" . ", "
. "'" . mysqli_real_escape_string($connection, $title) . "'" . ", "
. "'" . mysqli_real_escape_string($connection, Auth::get_user_id()) . "'" . ", "
. "'" . mysqli_real_escape_string($connection, $type) . "'" . ", "
. "'" . mysqli_real_escape_string($connection, 'preparation') . "'" . ", "
. mysqli_real_escape_string($connection, 'NULL')
. ")";
$result = mysqli_query($connection, $query) ? mysqli_insert_id($connection) : false;
mysqli_close($connection);
return $result;
}
Забираются данные через эту функцию:
public static function get()
{
$connection = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$connection) {
return json_encode(array());
}
$query = "SELECT * FROM reports";
$result = mysqli_query($connection, $query);
$data = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_close($connection);
return json_encode($data);
}
От себя хочу добавить, что в PHP я новичок и для меня это не слишком тривиальная задача. Если будут замечания по коду - пишите, выслушаю ваши предложения.
Обновление #1
После выставления кодировки соединению, с помощью $connection->set_charset('utf8');
, проблема с json "Malformed UTF-8 characters, possibly incorrectly encoded"
была устранена и была удалена функция convert_from_latin1_to_utf8_recursively
так как стала ненужной.
Но символы на странице остались в таком же формате.
Виртуальный выделенный сервер (VDS) становится отличным выбором
вот контроллер, как из формы взять id который будет в FindOne() на подобии FindOne($model->id)