web-dev-qa-db-fra.com

PHP Convertir Windows-1251 en UTF 8

J'ai un petit code HTML et j'ai besoin de le convertir en UTF-8.
J'utilise cette iconv("windows-1251", "utf-8", $html);

Tout le texte est converti correctement, mais si texte par exemple dans la balise <i>...</i>, il ne convertit pas le texte et je vois quelque chose comme ceci Показать мн

8
user2058653

Si vous avez accès au paquet Multibye, vous pouvez l'essayer. Voir la page PHP ici: http://www.php.net/manual/fr/function.mb-convert-encoding.php

$html_utf8 = mb_convert_encoding($html, "utf-8", "windows-1251");
15
Jeff Cashion PhD

Vous savez, un message comme Показать РјРЅ vous permet de voir si le codage De la page est windows-1251, mais le texte est codé en utf-8.
J'ai vu ce problème dans l'un de mes projets, il suffit donc de changer le codage de changement de page dans utf-8 et ce texte s'affichera correctement.

Laissez-moi vous prendre quelques exemples:
si la page dans utf-8, mais le texte dans windows-1251, vous verrez quelque chose comme ceci:
???? ?? ?????? ??? ????? ??? ??????? ?? ????? ???? ??? ????? 

si page dans windows-1251, mais texte dans utf-8 vous voyez ceci:
"Мобильные телефоны";"Apple iPhone 4

La plupart des solutions manquent de conversion en codage sur un octet. J'utilise mb_convert_encoding ($ string, 'windows-1251') pour convertir de UTF-8 dans mon cas.

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;

}
0
Sergey

J'utilise toujours la conversion manuelle (caractère par caractère), comme ceci:

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



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


echo $s;

p.s. n'oubliez pas, le codage du fichier .php devrait être UTF8. aussi, en tête HTML, insérer la déclaration standard pour UTF8  

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