www.gcmsite.ru

Новости Программы PHP-скрипты Статьи Числа
Услуги Резюме Игры Автомобили Поиск

СИСТЕМНОЕ И ВЕБ-ПРОГРАММИРОВАНИЕ
компьютерная техника, игры

Как быстро определить кодировку текстовой строки?

Возникла проблема: как быстро определить кодировку текстовой строки относительно UTF-8 Всё чаще приходится работать со строками в кодировке UNICODE.

Ниже представлена функция проверки, нужно ли преобразование кодировки UNICODE (UTF-8) в кодировку WINDOWS (win-1251)

Функция даёт довольно точный ответ, хотя построена не на по-кодовом преобразовании символов.

function detect_my_utf($s){
 $s=urlencode($s); // в некоторых случаях - лишняя операция (закоментируйте)
 $res='0';
 $j=strlen($s);

 $s2=strtoupper($s);
 $s2=str_replace("%D0",'',$s2);
 $s2=str_replace("%D1",'',$s2);
 $k=strlen($s2);

 $m=1;
 if ($k>0){
  $m=$j/$k;
  if (($m>1.2)&&($m<2.2)){ $res='1'; }
 }
 return $res;
}

Кратко - описание функции detect_my_utf():

  • преобразуем (строку в специальный формат)
  • вычисляем длину входящей строки
  • приводим все буквы строки в заглавные
  • убираем специфические коды %D0 и %D1
  • вычисляем длину новой строки
  • получаем соотношение тарой строки к новой

Если это соотношение 1 или близко к нему, то есть подозрение, что входящая строка не кодировалась в UNICODE. Если это соотношение находится в диапазоне от 1,2 до 2,2 - то можно смело перекодировать строку в WINDOWS кодировку win-1251.

На выходе функции имеем 0 или 1, соответственно, не UNICODE или UNICODE.

Примеры выполнения функции:

Пример 1

Входящая строка:
   РїР?С?С?Р?Р?Рє С?Р?Р·Р?Р°Р?РёС? Р°Р?РёР?Р°С+РёРё Р? imageready
Преобразованная строка:
   %D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BE%D0%BA
   %D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F
   %D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D1%86%D0%B8%D0%B8%20%D0%B2 imageready
Результат работы функции:
   1
Закодированная фраза: 
   порядок создания анимации в imageready

Пример 2

Входящая строка:
   Р?С?Р?Р?Р?С< С?С+РчР+Р?Р?Р?Р? акаР?РчР?РёС+РчС?РєР?Р?Р? С?РёС?С?Р?РєР°
Преобразованная строка:
   %D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D1%8B
   %D1%83%D1%87%D0%B5%D0%B1%D0%BD%D0%BE%D0%B3%D0%BE
   %D0%B0%D0%BA%D0%B0%D0%B4%D0%B5%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE
   %D1%80%D0%B8%D1%81%D1%83%D0%BD%D0%BA%D0%B0
Результат работы функции:
   1
Закодированная фраза: 
   основы учебного академического рисунка

Пример 3

Входящая строка:
   РїС?Р?Р?С?Р°Р?Р?Р° С+С'РчР?РёС? РїР?С+Р°С?апаР?Р?С<С: Р?РёС?РєР?Р?
Преобразованная строка:
   %D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0
   %D1%87%D1%82%D0%B5%D0%BD%D0%B8%D1%8F
   %D0%BF%D0%BE%D1%86%D0%B0%D1%80%D0%B0%D0%BF%D0%B0%D0%BD%D0%BD%D1%8B%D1%85
   %D0%B4%D0%B8%D1%81%D0%BA%D0%BE%D0%B2
Результат работы функции:
   1
Закодированная фраза: 
   программа чтения поцарапанных дисков

Пример 4

Входящая строка:
   пособие по рисованию
Преобразованная строка:
   %EF%EE%F1%EE%E1%E8%E5 %EF%EE %F0%E8%F1%EE%E2%E0%ED%E8%FE
Результат работы функции:
   0
Закодированная фраза: 
   пособие по рисованию
Данный алгоритм хорошо справляется с разнообразными входящими строками в составе сервиса статистики переходов с поисковых машин.
PHP — это язык программирования, основанный на использовании скриптов. Данный язык широко применяется для создания различных front-end и back-end веб-приложений. Поддерживается по-умолчанию большинством хостеров, являясь одним из лидеров среди языков программирования, предназначенных для создания динамических интерактивных сайтов.

Интересные материалы на сайте:

Автор, разработчик: Шаров Евгений   (gcmsite@yandex.ru)
(c) 2000-2020 GCM-Site - системное и веб-программирование
Цитирование материалов сайта возможно только при наличии гиперссылки