2013-03-29 15 views
8

Mam mały kod HTML i muszę go przekonwertować na UTF-8.
Używam tego iconv("windows-1251", "utf-8", $html);PHP Konwertuj Windows-1251 na UTF 8

Cały tekst konwertuje poprawnie, ale jeśli na przykład tekst w znaczniku <i>...</i>, to nie konwertować tekst i widzę somethig jak ten Показать РјРЅ

+1

proszę podać ciąg znaków, który próbujesz przekonwertować. – Ejaz

Odpowiedz

1

Wiesz, wiadomo jak Показать РјРЅ widać jeśli kodowanie strony jest windows-1251, ale tekst kodowany w utf-8.
Widziałem ten problem w jednym z moich projektów, więc po prostu zmień kodowanie zmian dla strony w utf-8 i ten tekst będzie wyświetlany poprawnie.

Podam kilka przykładów:
jeśli strona w utf-8, ale tekst w windows-1251 wil widzisz coś takiego:
???? ?? ?????? ??? ????? ??? ??????? ?? ????? ???? ??? ?????

jeśli strona w windows-1251, ale tekst w utf-8 to zobaczyć:
"Мобильные телефоны";"Apple iPhone 4

+0

Ten tekst pochodzi z pliku XML, a problem dotyczył tylko tagów HTML. – user2058653

0

zawsze używam ręcznego konwertowanie (znak po znaku), podobnie jak to:

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



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


echo $s; 

p.s. nie zapomnij, kodowanie pliku .php powinno być UTF8. Także w nagłówku HTML wstawić standardowego zgłoszenia na UTF-8

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

Większość roztworów brak konwersji kodowaniem pojedynczego bajtu. Używam mb_convert_encoding ($ string, 'windows-1251') do konwersji z UTF-8 w moim przypadku.

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; 

} 
-2

wypróbuj to, działa dla mnie!

$result = str_replace ('€', '€' , $result); 
+0

Jak to jest lepsze niż zaakceptowana odpowiedź sprzed czterech lat? – AmericanUmlaut