У меня проблема с обнаружением CP1250 в mb_detect_encoding () , в моем случае я хочу обнаружить 3 кодирования:
mb_detect_encoding($string, 'UTF-8,ISO-8859-2,Windows-1250')
Но Windows не поддерживает кодировки, любое решение?
mb_detect_encoding
всегда «обнаруживает» однобайтовые кодировки. Вы можете прочитать об этом в документации для mb_detect_order
:
В настоящее время mbstring реализует следующие фильтры обнаружения кодирования. Если есть некорректная последовательность байтов для следующих кодировок, обнаружение кодировки не удастся.
UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP-win, SJIS-win, JIS, ISO-2022-JP
Для ISO-8859-X, mbstring всегда определяет как ISO-8859-X.
Для UTF-16, UTF-32, UCS2 и UCS4 обнаружение кодировки будет прерываться всегда.
Выводы:
В общем случае невозможно точно определить однобайтовые кодировки. Если вам нужно сделать это на PHP, вам нужно будет сделать это вручную; не ожидайте очень хороших результатов.
Невозможно отличить ISO-8859-2 от Windows-1250 или любого другого однобайтового кодирования от любой другой кодировки. mb_detect_encoding
просто дает вам первую кодировку, которая действительна для данной строки, и оба значения одинаковы. Кодировки «Обнаруживать» по определению не возможны с какой-либо точностью.