首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php:从cp1251转换为utf8

php:从cp1251转换为utf8
EN

Stack Overflow用户
提问于 2012-11-22 08:20:18
回答 3查看 8.7K关注 0票数 4

我在将字符串从cp1251转换为utf8时遇到问题.

我需要从数据库中获取一些名字,这些名字在cp1251中(我不是创建数据库的人,所以我不能编辑它,但我确信这些名字是cp1251).

数据库中的名称是“Р?РЅС,РСЂРЅРСЂРЅРС,вциєрах“我将其转换为utf8,使用如以下所示的康涅夫函数:

(“UTF-8”,“UTF 1251//忽略”,$name)

我得到的结果是-“�?нтернетвцифрах”(俄语),但前两个符号不正确……应该是“Интернетвцифрах”。

所以我要做的最后一件事就是改变这两个符号"�?“俄罗斯字母"И"..。我真的不知道怎么做..。我试过使用preg_replace,但它没有使用work...or --我没有正确地使用它。

对于俄文信件,我很抱歉,如果不给他们看,我很难解释我需要什么。

EN

回答 3

Stack Overflow用户

发布于 2012-11-24 23:04:21

第一个字母的出现不正确,因为CP1251中没有使用存储И的UTF-8编码所需的一个字节(确切地说,是И)。如果数据库用问号替换了98字节,则必须在使用iconv之前将其更改回

代码语言:javascript
复制
$name = str_replace("\xD0\x3F", "\xD0\x98", $name);
echo iconv("UTF-8", "CP1251//IGNORE", $name);
票数 3
EN

Stack Overflow用户

发布于 2015-02-24 13:20:28

用这个:

代码语言:javascript
复制
mb_convert_encoding($model->text, 'cp1252', 'utf8')
票数 2
EN

Stack Overflow用户

发布于 2012-11-22 08:25:27

试试这个:

代码语言:javascript
复制
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;
       }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13508429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档