PHP конвертировать Windows-1251 в UTF 8
у меня есть небольшой html-код, и мне нужно преобразовать его в UTF-8.
Я использую это iconv("windows-1251", "utf-8", $html);
весь текст преобразуется правильно, но если текст, например, в теге <i>...</i>
, то он не преобразует текст, и я вижу somethig, как это Показать РјРЅ
5 ответов
Если у вас есть доступ к пакету 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
Я всегда использую ручную конвертацию (символ за символом), например:
$input= 'Обращение РљР°С';
$s= str_replace('С?','fgr43443443',$input);
$s= mb_convert_encoding($s, "windows-1251", "utf-8");
$s= str_replace('fgr43443443','ш',$s);
echo $s;
п.С. не забывайте, что .кодировка файла php должна быть UTF8. кроме того,в заголовке HTML вставьте стандартное объявление для utf8 в
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
большинству решений не хватает преобразования в однобайтовое кодирование. Я использую 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;
}