Превью комментария обрывается на половине эмодзи. А валидация то пропускает мусор, то режет нормальный текст 👇
📦 Задание
Сервис отзывов. Комментарий — VARCHAR(255) (255 символов в utf8mb4). Валидатор ограничивает длину, сервис делает короткое превью для карточки. Полгода всё работало, пока аудитория была русскоязычной с короткими текстами. После запуска в новых регионах посыпались жалобы: эмодзи и иероглифы в превью превращаются в ?, а форма то ругается на короткий текст, то молча режет данные при сохранении.
// src/Comment/CommentValidator.php
class CommentValidator
{
private const MAX_LENGTH = 255;
public function validate(string $text): void
{
if (strlen($text) > self::MAX_LENGTH) {
throw new ValidationException('Слишком длинный комментарий');
}
}
}
// src/Comment/CommentPreview.php
class CommentPreview
{
public function make(string $text): string
{
if (strlen($text) <= 100) {
return $text;
}
return substr($text, 0, 100) . '…';
}
}
🔹 Задачи
— Объяснить, почему эмодзи/иероглифы в превью бьются в «кракозябры»
— Объяснить, почему один и тот же текст то проходит валидацию, то нет, и как это расходится с лимитом колонки в БД
— Исправить и валидатор, и превью
Ставьте → 🔥 если нравится формат. Если нет → 🌚
💬 Решения пишите в комменты под спойлер — сравним подходы