Есть некоторый текст с немного поехавшей кодировкой. Часть строки в utf-8, другая в windows-1251.
Собственно вопрос, как выровнять кодировку всего текста в utf-8?
Решение:
function mbe_detect_encoding($string, $enc = null)
{
static $list = array('utf-8', 'windows-1251');
foreach ($list as $item) {
$sample = @iconv($item, $item, $string);
if (md5($sample) == md5($string)) {
if ($enc == $item) {
return true;
} else {
return $item;
}
}
}
return null;
}
$text = preg_split('!([ ,<>="\':])!ism', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach ($text as $key => $c) {
if (mbe_detect_encoding($c) == 'windows-1251')
$text[$key] = iconv('WINDOWS-1251', 'utf-8', $c);
}
$text = implode('', $text);