2013-08-08 5 views
1

У меня есть странные проблемы, следующий код:mb_detect_encoding показывает ту же кодировку

$str = "נסיון" // <--- Hebrew chars 
echo mb_detect_encoding ($str)."<br><br><br>"; 
$str = iconv (mb_detect_encoding($str),'UCS-2BE',$str); 
echo mb_detect_encoding ($str)."<br><br><br>"; 

Этот выход будет:

UTF-8

UTF-8

Этот код написанный в файле, который закодирован (с использованием Notepad ++) в UTF-8 без спецификации, пробовал другие кодировки и не работал.

Я также попытался преобразования строку с помощью:

$str = mb_convert_encoding($str,'UCS-2BE'); 

Но это не сработало. Какие-нибудь идеи?

+0

В чем проблема? Чтобы обнаружить иврит? Как насчет 'preg_match ('/ [\ u0591- \ u05F4] /', $ sData);' –

+0

Аналогичная проблема http://stackoverflow.com/questions/17104340/mb-detect-encoding-doesnt-properly-working-with -windows-1250-CP1250 – giorgio79

ответ

1

С documentation for mb_detect_order, функция, которая устанавливает порядок, в котором mb_detect_encoding тесты различных кодировок:

MBstring в настоящее время реализует следующие фильтры определения кодировки. Если есть некорректная последовательность байтов для следующих кодировок, обнаружение кодировки не удастся. UTF-8, UTF-7, ASCII, EUC-JP, SJIS, eucJP выигрыша, SJIS выигрыша, JIS, ISO-2022-JP

Для ISO-8859- *, MBstring всегда определяет, как ISO-8859 - *.

Для UTF-16, UTF-32, UCS2 и UCS4 обнаружение кодировки всегда сбой.

Таким образом, вы не можете определить кодировку второй строки с помощью функций mb.