Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Программирование

PHP. Как перевести в entities символы UTF за пределами базового диапазона

06.04.2020 23:29


24.05.2018 10:33
OlegON
 
Наступил на грабли. В PHP UTF - это нормальный UTF, который подразумевает весь диапазон символов, в том числе четырехбайтовую часть. В MySQL/Maria UTF - нечто убогое, что четырехбайтовую часть не учитывает. Т.е. если хотите запихивать какие-то расширенные смайлики через старонаписанный софт, необходимо использовать кодировку не utf8, а utf8mb4. Чистая жесть. Вижу пока только один способ это сделать - приводить символы расширенного диапазона к entities. Пока, перегуглив тонну всякого, сделал это так
Код:
$text = preg_replace_callback('/[\x{10000}-\x{10FFFF}]/u', function ($m) {
    $char = current($m);
    $utf = iconv('UTF-8', 'UCS-4', $char);
    return sprintf("&#x%s;", ltrim(strtoupper(bin2hex($utf)), "0"));
}, $text);

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.