解决GB2312、GBK、UTF-8转换问题

GB2312:信息交换用汉字编码字符集(不支持生僻字的字符集,这是其本身限制的问题)。

GBK:汉字编码字符集,向下与GB2312兼容(支持生僻字的字符集)。

UTF-8:是一种针对Unicode的可变长度字符编码,又称万国码。

现在手上一个项目正在上传基础数据,客户反馈某数据上传失败,我研究之后发现是客户上传的数据中“蘴”字导致的。可能之前code时没有注意生僻字转换的问题。

首先贴上出错的上传数据“某某县某某田园蘴农业科技有限公司”,百度了一下,“蘴”读音为“feng”,读一声。

问题代码:

$data[$i] = iconv('gb2312', 'utf-8', $temp);    //iconv(原编码, 目标编码, 要转的字符串)

这行代码本身没有错误,转换非生僻字也不会出错,但因生僻字“蘴”字的原因转换失败,转换为“false”。

然后网上找类似问题,但发现根据如下网上的答案并没有从根本上解决这个问题:

$data[$i] = iconv('gb2312', 'utf-8//IGNORE', $temp);

加上“//IGNORE”会让iconv()函数忽略错误,继续执行。

但转换为“某某县某某田园t农业科技有限公司”,此方法只是“压制”错误,将“蘴”错误的转换为“t”。

此函数不行,那就换一个函数:

$data[$i] = mb_convert_encoding($temp, 'utf-8', 'gb2312');    //mb_convert_encoding(要转的字符串, 目标编码, 原编码)

转换为“连平县鸿益田园?农业科技有限公司”,此方法与上面函数相同,只是“压制”错误,将“蘴”错误的转换为“?”

此时,我才意识到,不是函数的问题,是编码的问题:GB2312是不支持生僻字的。

果然,将编码换了一下这个问题就解决了:

$data[$i] = mb_convert_encoding($temp, 'utf-8', 'gbk');

转换为“某某县某某田园蘴农业科技有限公司”,转换成功。

吃一堑长一智,提醒自己这么“弱智”的问题要牢记!!!

发布了84 篇原创文章 · 获赞 33 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_35383263/article/details/81983417