PHP конвертировать Windows-1251 в UTF 8

У меня небольшой HTML-код, и мне нужно преобразовать его в UTF-8.
Я использую это iconv("windows-1251", "utf-8", $html);

Весь текст конвертируется правильно, но если текст например в теге <i>...</i>, то это не конвертировать текст, и я вижу что-то вроде этого Показать РјРЅ

6 ответов

Решение

Если у вас есть доступ к пакету Multibye, вы можете попробовать его. Смотрите страницу PHP здесь: http://www.php.net/manual/en/function.mb-convert-encoding.php

$html_utf8 = mb_convert_encoding($html, "utf-8", "windows-1251");

Вы знаете, сообщение как Показать РјРЅ Вы видите, если кодировка для страницы windows-1251, но текст закодирован в utf-8,
Я видел эту проблему в одном из моих проектов, поэтому просто измените кодировку изменений для страницы в utf-8 и этот текст будет показан правильно.

Позвольте мне привести несколько примеров:
если страница в utf-8, но текст в windows-1251 вы увидите что-то вроде этого:
???? ?? ?????? ??? ????? ??? ??????? ?? ????? ???? ??? ?????

если страница в windows-1251, но текст в utf-8 ты видишь это:
"Мобильные телефоны";"Apple iPhone 4

В большинстве решений отсутствует преобразование в однобайтовую кодировку. Я использую mb_convert_encoding($string,'windows-1251') для конвертации из UTF-8 в моем случае.

function ru2Lat($string)
{
$rus = array('ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я');
$lat = array('yo','zh','tc','ch','sh','sh','yu','ya','YO','ZH','TC','CH','SH','SH','YU','YA');
$string = str_replace($rus,$lat,$string);
$string = strtr($string,
     "АБВГДЕЗИЙКЛМНОПРСТУФХЪЫЬЭабвгдезийклмнопрстуфхъыьэ",
     "ABVGDEZIJKLMNOPRSTUFH_I_Eabvgdezijklmnoprstufh'i'e");

return($string);
}

function transliterate($string){
    if (!is_string($string)) return $string;
    return ru2lat(mb_convert_encoding($string,'windows-1251'));
}

function transliterate_array($a){

$c = array_map(transliterate,$a);
             return $c;

}

Я всегда использую ручное преобразование (посимвольное), например так:

$input= 'Обращение РљР°С';



$s= str_replace('С?','fgr43443443',$input);
$s= mb_convert_encoding($s, "windows-1251", "utf-8");
$s= str_replace('fgr43443443','ш',$s);


echo $s;

ps не забывайте, кодировка файла.php должна быть UTF8. также, в заголовке HTML, вставьте стандартную декларацию для UTF8

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

$data = mb_convert_encoding($data, "utf-8", "windows-1251"); $data = mb_convert_encoding($data, "Windows-1251", "Windows-1250");

//у меня работает

Попробуй это, у меня работает!

$result = str_replace ('€', '€' , $result);
Другие вопросы по тегам