Q: Как преобразовать UTF-8 в Windows-1251 с конвертацией в HTML ENTITIES? Есть старый проект на поддержке, все в кодировке windows-1251
Был функционал отправки комментариев, отправлял комментарии через простой submit формы.
Соответственно всякие тексты, типа "я отправила символ сердце ❤️" автоматически браузером конвертировались в "я отправила символ сердце ❤", т.е. в html сущности превращалось то, чего нет в windows-1251. Проблем не было.
Пришлось переписать так, что теперь комментарии отправляются через ajax, я не нашел возможности отправить запрос в windows-1251, браузер насильно его всегда в UTF-8 отправляет, поэтому на сервере получаю теперь ❤️ вместо ❤.
Есть в PHP, либо в JavaScript какой-нибудь способ сделать преобразование UTF-8 -> windows-1251, чтобы текст оставался текстом, а символы, которые нельзя преобразовать в html сущности автоматически конвертировалась? Браузер же как-то это делает при отправке POST запросов в windows-1251.

A: Пока такое костыльное решение пришлось использовать, но вроде работает
$str = 'я отправила символ сердце ❤';
$out = '';
foreach (mb_str_split($str) as $item) {
    $win = iconv('UTF-8', 'WINDOWS-1251', $item);
    if (!$win) {
        $out .= mb_convert_encoding($item, 'HTML-ENTITIES', 'UTF-8');
    }
    else {
        $out .= $win;
    }
}

return $out;

