Как быстро определить кодировку текстовой строки PDF Печать E-mail

Возникла проблема: как быстро определить кодировку текстовой строки относительно 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  
Закодированная фраза:      пособие по рисованию  

Автор Шаров Евгений

По материалам сайта: http://www.gcmsite.ru/