Статьи и новости
Как использовать Emoji (эмодзи) в CMS Opencart?

Эмодзи в OpenCart: кодировки MySQL и правка mysqli.php для корректного хранения

 
 
 
 
 
Opencart - бесплатный движок для создания интернет-магазинов

Какую версию OpenCart (ОпенКарт) / LiveStore выбрать в 2026 году и где ее скачать.

 
 
 
 
 
Подборка новых модулей для Opencart за декабрь 2025

Новинки за декабрь 2025 года: 404 страница и лог ее посещений, Новогодний персонаж, SEO FAQ с поддержкой JSON-LD и Microdata, Коммерческое предложение в PDF.

 
 
 
 
 
С Новым 2026 Годом
31 декабря 2025
С Новым 2026 Годом

Наше поздравление с наступающим 2026 годом.

 
 
 
 
 

Как использовать Emoji (эмодзи) в CMS Opencart?

 
Как использовать Emoji (эмодзи) в CMS Opencart?

Если в OpenCart попытаться сохранить эмодзи (например, в описании товара, отзыве, категории или даже в SEO-полях), часто происходит одно из следующего: символы превращаются в ????, не сохраняются вовсе или вызывают ошибку записи в базу данных. Почти всегда причина одна - база данных и/или соединение с MySQL используют кодировку utf8 (фактически utf8mb3), которая не поддерживает 4-байтовые символы.

Эмодзи относятся именно к 4-байтовым символам, поэтому для их корректной работы в OpenCart требуется переход на utf8mb4.

Почему стандартный utf8 в MySQL не подходит

  • utf8 в MySQL - это не полноценный UTF-8, а его 3-байтовая версия (utf8mb3).
  • Любые символы, требующие 4 байта (эмодзи, некоторые иероглифы, редкие символы), в такой кодировке не сохраняются.
  • MySQL либо заменяет их на ?, либо отказывает в записи.
  • Единственное корректное решение - использование utf8mb4.

Где в OpenCart реально используют эмодзи

На практике эмодзи чаще всего применяют не только в текстах, но и в маркетинговых элементах:

  • Название товара и описание
  • Описание и заголовок категории
  • Отзывы и комментарии
  • SEO-поля: Title, Description
  • Заголовки статей, блогов, информационных страниц
  • Тексты писем (рассылки, уведомления)

Поэтому важно перекодировать именно те таблицы, где такие данные реально хранятся.

План действий

  1. Сделать резервную копию базы данных.
  2. Перевести базу и таблицы в utf8mb4.
  3. Исправить соединение OpenCart с MySQL (mysqli.php).
  4. Проверить сохранение и отображение данных.

Шаг 1. Резервная копия базы данных

Перед любыми изменениями обязательно сделайте дамп базы:

mysqldump -u USER -p DB_NAME > backup.sql

Для больших баз рекомендуется сразу сжимать:

mysqldump -u USER -p DB_NAME | gzip > backup.sql.gz

Шаг 2. Перевод базы и таблиц в utf8mb4

2.1. Кодировка базы по умолчанию

ALTER DATABASE `DB_NAME`
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

Это задаёт кодировку по умолчанию, но не всегда автоматически перекодирует существующие таблицы.

2.2. Перекодировка таблиц

Основные таблицы OpenCart, где чаще всего нужны эмодзи:

  • oc_product, oc_product_description
  • oc_category, oc_category_description
  • oc_review
  • oc_information, oc_information_description

Пример команды:

ALTER TABLE oc_product_description
  CONVERT TO CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

Повторите для всех нужных таблиц.

Рекомендация для LiveStore и ocStore

Для сборок 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 при условии, что перед выполнением команд сделан резервный дамп базы данных.

2.3. Проверка колонок

SHOW FULL COLUMNS FROM oc_product_description;

Если отдельные поля остались в utf8, их можно изменить точечно:

ALTER TABLE oc_product_description
  MODIFY `description` LONGTEXT
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

Шаг 3. Исправление соединения с MySQL в OpenCart

Даже при правильной кодировке таблиц эмодзи не будут сохраняться, если соединение с MySQL устанавливается в utf8.

Откройте файл:

system/library/db/mysqli.php

Найдите строку:

$this->connection->set_charset("utf8");

И замените её на:

$this->connection->set_charset("utf8mb4");

Если в проекте используется другой драйвер (mpdo, mysql), проверьте аналогичную настройку и там.

Шаг 4. Проверка результата

  1. Добавьте эмодзи в описание товара, категории или отзыв.
  2. Сохраните данные.
  3. Проверьте содержимое таблицы напрямую в базе.
  4. Убедитесь, что данные корректно отображаются на сайте.

Пример эмодзи для проверки

Для быстрой проверки корректной работы кодировки utf8mb4 используйте эмодзи, которые гарантированно являются 4-байтовыми символами.

Скопируйте и вставьте следующий текст в любое текстовое поле OpenCart:

Тест эмодзи: 😀 🚀 🔥 👍 💡 ❤️ ⭐ 🛒

Если после сохранения эмодзи корректно хранятся в базе данных и отображаются на витрине сайта, значит кодировка и соединение с MySQL настроены правильно.

Если же символы превращаются в знаки вопроса или пропадают, значит где-то всё ещё используется utf8 вместо utf8mb4.

Типичные проблемы

Эмодзи сохраняются как знаки вопроса

  • Не исправлено соединение (set_charset всё ещё utf8).
  • Перекодированы не все таблицы или поля.
  • Данные импортируются из старого дампа с неверной кодировкой.

В базе всё правильно, но на сайте отображается неправильно

  • Проверьте <meta charset="UTF-8"> в шаблоне.
  • Проверьте, нет ли фильтров, которые обрезают или преобразуют текст.
  • Очистите кеши OpenCart и шаблона.

После этого эмодзи будут стабильно сохраняться и корректно отображаться во всех частях магазина - от описаний товаров до SEO-полей и писем.


Рекомендуем посмотреть
Рекомендуем прочитать
 
 


Ещё никто не оставил комментариев к записи.
Написать новый комментарий (для ответа пользуйтесь ссылкой под нужным комментарием)