Алгоритм определения кодировки.
имхо, ты прав, как-то волосы дыбом становятся от такой функции 

Я когда-то написал подобную функцию:
$nstring = NULL;
foreach(array("UTF-8", "Windows-1251") as $encoding){
if(!mb_check_encoding($string, $encoding{
continue;
}
$nstring = mb_convert_encoding($string, "UTF-8", $encoding);
if(strlen($nstring{
break;
}
}
return $nstring;
Точнее так, на мой взгляд, хеш не будет равен только в том случае, если в строка не в проверяемой кодировке и каких-то ее байтов/сочетаний байтов физически не может быть в проверяемой кодировке, тогда просто будет что-то типа исключения, а в остальных случаях хеш должен совпадать.примерно так оно и есть (будет исключение, символ будет пропущен или заменен на предопределенный символ зависит от реализации в данном языке и настроек)
В данном куске кода лишь делается выбор: скорее utf-8 или скорее win-1251. И выбор делается на основе простой эвристики: попробовали прочитать в utf-8, если при этом прочитались невалидные символы, то значит это кодировка 1251, а не utf8
Особо доставляет сравнение хешей строчек вместо просто сравнения строчек.
Автор, наверное, думал, что соптимизировал вот, строчки меньшей длины сравнивает...
Автор, наверное, думал, что соптимизировал вот, строчки меньшей длины сравнивает...
php радиоактивный язык походу 

От пхп волосы на клавиатуре растут. //Вчерашний ЛОР
Оставить комментарий
wwoland
Добрый день.Видел тут недавно способ определения кодировки вот такой
Не ругайте за ПХП, просто мне его в таком виде показали.
Так вот, я его попробовал, правда использовал шел и утилиты iconv и md5sum, так у меня этот алгоритм как-то не особо сработал.
Ну и на мой не самый просвещенный взгляд, он и не должен работать в большинстве случаев.
Точнее так, на мой взгляд, хеш не будет равен только в том случае, если в строка не в проверяемой кодировке и каких-то ее байтов/сочетаний байтов физически не может быть в проверяемой кодировке, тогда просто будет что-то типа исключения, а в остальных случаях хеш должен совпадать.
Подскажите, пожалуйста, где я заблуждаюсь, если я заблуждаюсь. Или может я чего-то не знаю про php и его реализацию iconv и md5?
Спасибо.
ПС. Если вопрос плохо сформулирован, буду рад в помощи по переформулировке