@mix-9

Как настроить unserialize для данных из mysql?

Доброго времени суток. Сервер апач и mysql были настроены для работы с win-1251, Затем настройки были изменены для utf-8.
spoiler

mbstring.func_overload 2
mbstring.internal_encoding UTF-8
----
SET NAMES 'utf8
SET collation_connection = "utf8_unicode_ci"


unserialize(serialize("русский текст")); // "русский текст"
работает корректно, однако для данных, полученных из mysql возвращается false. Код на битрикс, но это вряд ли имеет значение
$data = \Bitrix\Main\Application::getConnection()->query('select * from b_event')->fetchRaw();
var_dump(unserialize($data['C_FIELDS'])); // false

В чем может быть проблема?
  • Вопрос задан
  • 1048 просмотров
Пригласить эксперта
Ответы на вопрос 1
Sekira
@Sekira
Проблема с кодировкой. Как были изменены настройки с win-1251 на utf-8? Вам поможет php функция iconv, var_dump(unserialize(iconv("UTF-8", "windows-1251", $data['C_FIELDS']))); (если не заработает, попробуйте кодировки местами поменять).
Но это плохой вариант, надо нормально таблицу перекодировать, тогда ничего в коде менять не придется. К тому же, если будут вноситься новые данные в таблицу, они уже будут в кодировке utf-8, а старые данные так и останутся в windows-1251 и вообще каша получится. Так что надо менять кодировку всей таблицы/базы, точнее каждого его поля/строки. Так как до этого вы вносили туда данные в одной кодировке, а сейчас читаете эти же данные, но указываете другую кодировку, хотя данные остались в старой кодировке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы