Cookie в PHP 7.4
Обнаружилась очень странная проблема у меня на сайте — некоторые комментаторы стали подписываться с плюсом между именем и фамилией. В первый раз я решил, что у человека это вышло случайно или, может, это что-то для него значит, но со временем появились и другие.
Выяснилось, что плюс появился сам собой, люди его и не думали ставить. Так я понял, что столкнулся с каким-то багом.
В чём примерно дело, понятно стало почти сразу — в вебе пробел иногда кодируется как «+», видимо ошибка как-то связана с этим. Сначала я неправильно подумал, что «плюс» появляется в урле, но данные пользователей туда не попадают, потом сообразил заглянуть в «куки», провёл пару экспериментов и всё встало на свои места.
Проблема воспроизводится у тех комментаторов, которые оставили свой первый комментарий до того, как мой сайт перешёл на ПХП 7.4. В этой версии сменился способ кодирования пробела в «куках» (см. на скриншоте) — был +, стало %20.
В принципе, можно вернуть «статус-кво» следующим кодом:
if (strpos($_SERVER['HTTP_COOKIE'], '+') !== false) {
parse_str(strtr($_SERVER['HTTP_COOKIE'], ['; ' => '&']), $_COOKIE);
}
Но хорошо бы внедрить в движок блога код, который будет перекодировать такие куки у пользователей.
Я кстати помню, что в эгее был баг, не позволяющий подписаться со знаком + в почте. Бирману писал, но он проигнорировал. А я часто пользуюсь этим способом: в джимейла можно писать на любой адрес в формате имяпользователя+чтоугодно@gmail.com письма потом легко фильтровать, искать, добавлять в спам, итд.
Да я и сам пользуюсь. Напишу Илье.
А я помню удивился, почему у меня + оказался. Тоже подумал — мало-ли, сам накосячил при вводе.
Илье про проблему рассказал, но он пока ничего не ответил, надо наверное самому патч изготовить.