На сервере разработки все работает правильно.
В моей локальной среде mysqli_fetch_assoc() заменяет \n на \r\n в текстовых полях, возвращаемых из базы данных.
Из-за этого, unserialize() прерывается:
Код: Выделить всё
unserialize(): Error at offset X of Y bytes
Важные детали:
- И в среде разработки, и в локальной среде используются:
PHP 8.2.26 - MariaDB 11.2
[*]Структура базы данных идентична (
Код: Выделить всё
SHOW CREATE TABLE[*]Кодировка – utf8mb3 на обоих серверах
[*]Версии PHP идентичны
[*]Вывод phpinfo кажется одинаковым (по крайней мере, все, что связано с mysql, сортировкой и кодировкой)
[*]Настройки подключения одинаковы идентично
[*]mysqlnd используется в обеих средах, и версия одинакова.
Что я уже пробовал:
- Проверенная версия PHP точно соответствует
- Проверенная версия MariaDB точно соответствует
- Проверенная структура таблицы и кодировка
- Проверено sql_mode
- Проверено:
Код: Выделить всё
SET sql_mode='NO_BACKSLASH_ESCAPES'; SET character_set_results=binary; - Сравнение результатов phpinfo()
- Проверенные переменные кодировки клиента/сервера
- Подтверждено, что необработанное значение в БД содержит только \n, а не \r\n
Замена символов в PHP является не приемлемым решением.
Вопрос:
Что может привести к тому, что mysqli_fetch_assoc преобразует \n в \r\n в одной среде, но не в другой, если версии PHP и MariaDB идентично?
Я уже искал в Google и спрашивал у ИИ возможные причины, но не нашел решения.
Есть идеи, что еще может вызвать такое поведение?
Подробнее здесь: https://stackoverflow.com/questions/798 ... characters
Мобильная версия