Існує дуже багато (я б навіть сказав занадто багато) різних кодувань для кирилиці (і української мови зокрема):
— UTF-8 (Unicode), яка все більше набирає популярності, як серед ОС так і в Інтернеті
— CP1251 (ака Windows-1251), яка залишилась в спадок від старих версій Windows
— KOI8-U (або KOI8-R), яка залишилася в спадок від старих версіх *nix’ів (Linux, FreeBSD)
— MacUkraine (або MacCyrillic), яка залишилася в спадок від старих версіх MacOS
— CP866, яка залишилася в спадок від DOS’у
— ISO 8859-5, яка майже ніде і не використовувалась
Зараз відбувається міграція на UTF-8, що позбавляє проблем з використанням різних мов.
На одному з моїх проектів я аналізую, звідки користувачі заходять на сайт (в основному мене цікавлять, за якими ключовими словами сайт знаходиться в пошукових системах).
І ось тут виникла проблема з кодуваннями, бо деякі пошукові системи (наприклад Яндекс) ще й досі використовують CP1251, а Google може використовувати різні кодування (в залежності від параметрів).
Тому я написав функцію на php (використавши функцію для визначення UTF-8), яка автоматично визначає кодування (підтримується UTF-8, CP1251 та KOI8-U) і перекодовує текст в потрібне.
Вихідний код: Автоматичне визначення кодування
Опис:
string autoencode (string $string, [string $encoding])
Приклад використання:
include("шлях/до/autoencode.php");
$text_utf=autoencode($text, 'utf-8');
В цієї функції є недоліки. Основний – вона визначає кодування, підраховуючи коди маленьких літер (яких в звичайному тексті – більшість). Але якщо в тексті переважають великі літери, то відбувається плутанина між CP1251 та KOI8-U
P.S. Якщо в когось є кращий алгоритм, поділіться
P.S.S. Таблиця з кодуваннями кирилиці