解决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');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论