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 Показать мн
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");
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;
}
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">