После апдейта PHP 8.4 json_encode резко забаррикадировался
Обновился недавно на PHP 8.4 и json-ответы стали либо с кривой кодировкой, либо вообще пустые, хотя раньше всё нормально было. Использую обычный json_encode для массива с UTF-8 строками без BOM, ошибок в логах не вижу. Проверил настройки — mb_internal_encoding на UTF-8, output_buffering выключен, заголовки нормально идут, content-type json. Но проблема осталась.
Файлы на BOM проверил, пробовал флаги типа JSON_UNESCAPED_UNICODE — изменений нет. Заметил, что если явно ставить header("Content-Type: application/json; charset=utf-8"), иногда помогает, но не всегда.
Похоже, что в этой версии PHP что-то с кодировками или с буфером вывода изменили. Был похожий баг при переходе с 7.4 на 8.0 — там тоже подводные камни. Думаю, может сюда залезает дефолтная кодировка или iconv, если где-то неявно что-то перекодируется.
Если кто-то недавно на 8.4 перешёл — как справлялись? Может с mbstring или output buffering там баги в связке с json? Копать сложно, ручные тесты муторные, а клиенту приходит криво.