Я использую JQuery для сериализации и отправки значений формы на сервер PHP/MySQL, а текстовая область формы содержит текст и emojis как объекты HTML:
<textarea>Hello 😀 and goodbye</textarea>
Сервер получает:
Привет \ud83d\ude00 и до свидания
Однако только "Hello" корректно сохраняется в базе данных. Emoji/entity и любой текст после его исчезновения. База данных:
Привет
Все это UTF-8.
Какой правильный способ разобрать это во что-то, что можно сохранить, а затем вернуть обратно в HTML таким образом, чтобы он отображался правильно? Я должен пропустить что-то простое.
Решаемые.
Или измените сопоставление базы данных/таблицы, как и Энди Фостер в комментариях под вопросом, или JSON-кодирование/декодирование, чтобы гарантировать, что он будет правильно сохранен в виде строки.
json_encode($str);
json_decode($str);
В моем случае было три вещи, влияющие на кодирование/рендеринг:
1) Первоначальная передача с использованием JQuery serialize(), которая преобразует emoji в escape-последовательность Unicode.
2) Сохранение escape-последовательности Unicode в базу данных. Я использовал кодировку JSON, чтобы пройти мимо этого.
3) Выходное экранирование при рендеринге строки JOON-декодированной строки обратно в шаблон HTML.
utf8mb4