Алгоритм определения кодировки.
имхо, ты прав, как-то волосы дыбом становятся от такой функции
$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?
Спасибо.
ПС. Если вопрос плохо сформулирован, буду рад в помощи по переформулировке