надо срочно сюда
что-нибудь добавить
Новинки за декабрь 2025 года: 404 страница и лог ее посещений, Новогодний персонаж, SEO FAQ с поддержкой JSON-LD и Microdata, Коммерческое предложение в PDF.
Если в OpenCart попытаться сохранить эмодзи (например, в описании товара, отзыве, категории или даже в SEO-полях), часто происходит одно из следующего: символы превращаются в ????, не сохраняются вовсе или вызывают ошибку записи в базу данных. Почти всегда причина одна - база данных и/или соединение с MySQL используют кодировку utf8 (фактически utf8mb3), которая не поддерживает 4-байтовые символы.
Эмодзи относятся именно к 4-байтовым символам, поэтому для их корректной работы в OpenCart требуется переход на utf8mb4.
utf8mb3).?, либо отказывает в записи.utf8mb4.На практике эмодзи чаще всего применяют не только в текстах, но и в маркетинговых элементах:
Поэтому важно перекодировать именно те таблицы, где такие данные реально хранятся.
utf8mb4.Перед любыми изменениями обязательно сделайте дамп базы:
mysqldump -u USER -p DB_NAME > backup.sql
Для больших баз рекомендуется сразу сжимать:
mysqldump -u USER -p DB_NAME | gzip > backup.sql.gz
ALTER DATABASE `DB_NAME`
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Это задаёт кодировку по умолчанию, но не всегда автоматически перекодирует существующие таблицы.
Основные таблицы OpenCart, где чаще всего нужны эмодзи:
oc_product, oc_product_descriptionoc_category, oc_category_descriptionoc_reviewoc_information, oc_information_descriptionПример команды:
ALTER TABLE oc_product_description
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Повторите для всех нужных таблиц.
Для сборок LiveStore и ocStore на практике рекомендуется сразу перекодировать все основные таблицы с текстовыми данными, а не делать это выборочно.
Это позволяет избежать ситуаций, когда эмодзи корректно работают, например, в товарах, но ломаются в отзывах, статьях или блоге.
ALTER TABLE oc_review CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_review_article CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_article_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_blog_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_category_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_information_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE oc_product_description CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Такой подход считается безопасным и предпочтительным для LiveStore и ocStore при условии, что перед выполнением команд сделан резервный дамп базы данных.
SHOW FULL COLUMNS FROM oc_product_description;
Если отдельные поля остались в utf8, их можно изменить точечно:
ALTER TABLE oc_product_description
MODIFY `description` LONGTEXT
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Даже при правильной кодировке таблиц эмодзи не будут сохраняться, если соединение с MySQL устанавливается в utf8.
Откройте файл:
system/library/db/mysqli.php
Найдите строку:
$this->connection->set_charset("utf8");
И замените её на:
$this->connection->set_charset("utf8mb4");
Если в проекте используется другой драйвер (mpdo, mysql), проверьте аналогичную настройку и там.
Для быстрой проверки корректной работы кодировки utf8mb4 используйте эмодзи, которые гарантированно являются 4-байтовыми символами.
Скопируйте и вставьте следующий текст в любое текстовое поле OpenCart:
Тест эмодзи: 😀 🚀 🔥 👍 💡 ❤️ ⭐ 🛒
Если после сохранения эмодзи корректно хранятся в базе данных и отображаются на витрине сайта, значит кодировка и соединение с MySQL настроены правильно.
Если же символы превращаются в знаки вопроса или пропадают, значит где-то всё ещё используется utf8 вместо utf8mb4.
set_charset всё ещё utf8).<meta charset="UTF-8"> в шаблоне.После этого эмодзи будут стабильно сохраняться и корректно отображаться во всех частях магазина - от описаний товаров до SEO-полей и писем.