将Windows-1251编码转换为UTF-8的PHP方法

13

我有一小段HTML代码,需要将其转换为UTF-8编码。
我使用以下代码:iconv("windows-1251", "utf-8", $html);

所有文本都正确转换了,但是如果文本在标签<i>...</i>中,则不会转换文本,我看到的是类似于РџРѕРєР ° Р· Р ° ть РјРЅ 的东西。


3
请提供您正在尝试转换的字符串。 - Ejaz
6个回答

34

1
你知道,像 Показать РјРЅ 这样的消息,如果页面编码为 windows-1251,但文本编码为 utf-8,那么你就会看到它。
我在我的一个项目中遇到了这个问题,所以只需将页面编码更改为 utf-8,这个文本就会正确显示。

让我举几个例子:
如果页面是 utf-8,但文本是 windows-1251,你会看到类似这样的东西:
???? ?? ?????? ??? ????? ??? ??????? ?? ????? ???? ??? ?????

如果页面是 windows-1251,但文本是 utf-8,你会看到这个:
"Мобильные телефоны";"Apple iPhone 4


那段文本来自XML文件,问题仅出现在HTML标签中。 - user2058653

0

大多数解决方案缺乏转换为单字节编码的功能。在我的情况下,我使用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

我通常使用手动转换(逐字逐句),就像这样:

$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">

-1

$data = mb_convert_encoding($data, "utf-8", "windows-1251"); $data = mb_convert_encoding($data, "windows-1251", "Windows-1250");

//对我来说有效


-3

试试这个,对我有效!

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

2
这个方案比四年前被接受的答案更好在哪里? - AmericanUmlaut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接