我在将字符串从cp1251转换为utf8时遇到问题.
我需要从数据库中获取一些名字,这些名字在cp1251中(我不是创建数据库的人,所以我不能编辑它,但我确信这些名字是cp1251).
数据库中的名称是“Р?РЅС,РСЂРЅРСЂРЅРС,вциєрах“我将其转换为utf8,使用如以下所示的康涅夫函数:
(“UTF-8”,“UTF 1251//忽略”,$name)
我得到的结果是-“�?нтернетвцифрах”(俄语),但前两个符号不正确……应该是“Интернетвцифрах”。
所以我要做的最后一件事就是改变这两个符号"�?“俄罗斯字母"И"..。我真的不知道怎么做..。我试过使用preg_replace,但它没有使用work...or --我没有正确地使用它。
对于俄文信件,我很抱歉,如果不给他们看,我很难解释我需要什么。
发布于 2012-11-24 23:04:21
第一个字母的出现不正确,因为CP1251中没有使用存储И的UTF-8编码所需的一个字节(确切地说,是И)。如果数据库用问号替换了98字节,则必须在使用iconv之前将其更改回
$name = str_replace("\xD0\x3F", "\xD0\x98", $name);
echo iconv("UTF-8", "CP1251//IGNORE", $name);发布于 2015-02-24 13:20:28
用这个:
mb_convert_encoding($model->text, 'cp1252', 'utf8')发布于 2012-11-22 08:25:27
试试这个:
function cp1251_to_utf8($s){
$c209 = chr(209); $c208 = chr(208); $c129 = chr(129);
for($i=0; $i<strlen($s); $i++) {
$c=ord($s[$i]);
if ($c>=192 and $c<=239) $t.=$c208.chr($c-48);
elseif ($c>239) $t.=$c209.chr($c-112);
elseif ($c==184) $t.=$c209.$c209;
elseif ($c==168) $t.=$c208.$c129;
else $t.=$s[$i];
}
return $t;
}https://stackoverflow.com/questions/13508429
复制相似问题