jakulov
@jakulov

Как преобразовать 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.
  • Вопрос задан
  • 144 просмотра
Решения вопроса 1
jakulov
@jakulov Автор вопроса
Написал костыль, который как временное решение сойдет.

$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;
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
revenger
@revenger
49.5
Я вас полностью понимаю. У меня тоже проект 10+ летней давности с табличной версткой и кодом, html и sql вперемешку.
Приходится использовать iconv, но это тупиковый путь из костылей и велоcипедов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы