Функция update_option не может сохранить текст с emoji, как опцию WordPress

Есть такая неприятная особенность у WordPress-а. Если вы захотите сохранить какой-нибудь текст, содержащий символы emoji, при помощи стандартной функции API update_option, то вас ждут эпический облом и разочарование. Ваш текст тупо не сохранится и даже сообщения об ошибке вы не получите. Можете пытаться конвертировать базу из utf8mb4 в utf8mb4_unicode_c, или совершать иные обряды с бубном – не поможет.

Выход из ситуации заключается в обработке вашего текста с эмоджами при помощи функции wp_encode_emoji перед тем, как передавать его в update_option. Ну как-то так:

$content = 'Hello world 🌐';
update_option('my_option_name', wp_encode_emoji($content));

Как альтернативный вариант, можно сразу сохранять emoji в виде шестнадцатеричного HTML кода. Т.е, пример выше можно переделать следующим образом:

$content = 'Hello world 🌐';
update_option('my_option_name', $content);

В этом случае, emoji с изображением Земли будет сохранен без всяких проблем. Более того, если вы случайно откроете ваш PHP скрипт в не поддерживающем UTF-8 редакторе, внесете правки и сохраните изменения, то карета не превратиться в тыкву и ваш emoji не похерится при перезаписи файла.

P.S. Не понимаю, чего бы им не вставить вызов wp_encode_emoji прямо в коде функции update_option. Столько людей бы мозги себе не ломало…

Liked Liked
No Comments