Как быстро определить кодировку текстовой строки?
Возникла проблема: как быстро определить кодировку текстовой строки относительно 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 веб-приложений. Поддерживается по-умолчанию большинством хостеров, являясь одним из лидеров среди языков программирования, предназначенных для создания динамических интерактивных сайтов. |
Интересные материалы на сайте:
|