web-dev-qa-db-ja.com

PHP Windows-1251をUTF 8に変換

小さなhtmlコードがあり、それをUTF-8に変換する必要があります。
これを使用しますiconv("windows-1251", "utf-8", $html);

すべてのテキストは正しく変換されますが、たとえばタグ<i>...</i>内のテキストの場合、テキストは変換されず、このようなПоказать РјРЅが表示されます

9
user2058653

Multibyeパッケージにアクセスできる場合は、それを試すことができます。 PHPここのページ: http://www.php.net/manual/en/function.mb-convert-encoding.php を参照してください)

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

ページのエンコードがПоказать РјРЅであるかどうかはwindows-1251のようなメッセージでわかりますが、テキストはutf-8でエンコードされています。
この問題は私のプロジェクトの1つで見たので、utf-8でページのエンコーディングを変更すると、このテキストが正しく表示されます。

いくつか例を挙げましょう。
ifページは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;

}
0
Sergey

私は常に次のように(文字ごとに)手動変換を使用します。

$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の先頭にTF8の標準宣言を挿入します

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