Я хотел бы обнаружить кодировку некоторого текста (используя PHP).
Для этого я использую функцию mb_detect_encoding ().
Проблема в том, что функция возвращает разные результаты, если я изменяю порядок возможных кодировок с помощью функции mb_detect_order ().
Рассмотрим следующий пример
$html = <<< STR
ちょっとのアクセスで落ちてしまったり、サーバー障害が多いレンタルサーバーを選ぶとあなたのビジネス等にかなりの影響がでてしまう可能性があります。特に商売をされている個人の方、法人の方は気をつけるようにしてください
STR;
mb_detect_order(array('UTF-8','EUC-JP', 'SJIS', 'eucJP-win', 'SJIS-win', 'JIS', 'ISO-2022-JP','ISO-8859-1','ISO-8859-2'));
$originalEncoding = mb_detect_encoding($str);
die($originalEncoding); // $originalEncoding = 'UTF-8'
Однако, если вы измените порядок кодировок в mb_detect_order (), результаты будут другими:
mb_detect_order(array('EUC-JP','UTF-8', 'SJIS', 'eucJP-win', 'SJIS-win', 'JIS', 'ISO-2022-JP','ISO-8859-1','ISO-8859-2'));
die($originalEncoding); // $originalEncoding = 'EUC-JP'
Итак, мои вопросы:
Почему это происходит?
Есть ли в PHP способ правильно и однозначно определить кодировку текста?