CamaroSS
Well-Known Member
- Регистрация
- 21.02.2012
- Сообщения
- 176
Есть необходимость добавить поддержку всяких разных символов из юникода для вводимых данных на нескольких старых самописных сайтах, которые изначально работают в windows-1251, но в некоторых участках имеют вкрапления utf-8 и windows-1252 :wacko: . Так как перекодировка всего и вся в utf-8 займёт значительное время плюс может какие-то моменты попросту поломать, было решено сделать поддержку по типу ВК, то есть всё приводится к windows-1251, а "редкие" символы преобразуются в HTML-сущности.
Пока сделал такой класс для преобразования данных туда-обратно, вроде бы работает, как ожидается, и довольно шустро. Как вам такой подход, какие могут быть неприятности?
Пока сделал такой класс для преобразования данных туда-обратно, вроде бы работает, как ожидается, и довольно шустро. Как вам такой подход, какие могут быть неприятности?
Код:
class UTFire
{
/*
* Русские буквы не должны преобразовываться в HTML-сущности
*/
static $convmap = array(0x80,0x40f,0,0xffff,0x450,0xffff,0,0xffff);
static function isUTF8($str) {
return preg_match('//u', $str);
}
static function fwd($str) {
if(static::isUTF8($str)) {
$str = mb_encode_numericentity($str, static::$convmap, 'UTF-8');
$str = iconv('UTF-8', 'windows-1251//IGNORE', $str);
}
return $str;
}
static function bck($str) {
if(!static::isUTF8($str)) {
$str = iconv('windows-1251', 'UTF-8//IGNORE', $str);
$str = mb_decode_numericentity($str, static::$convmap, 'UTF-8');
}
return $str;
}
}