PHP转换编码问题GBK/UTF-8
2017-11-27 11:14
295 查看
PHP 转码问题
在实际项目中,经常会遇到编码不正确引发的各种问题!这样就非常容易出现乱码或截取长度的时候截取的不正确,如果简单的用iconv函数转码的话,有时又无法保证对方传过来的一定是某种编码。 举个例子:我现在的项目开发编码是UTF-8,而又有很多地方需要用JSON来接收、发送数据和接口返回的是GBK的数据,接收到的数据一定是UTF-8或者是gbk编码(非UTF-8中文无法encode和decode),但我需要把接收来的数据用在我们的系统中,这样就必须转码一次,当我们需要发送JSON数据给其他接收者的时候,又必须将编码从GBK转成UTF-8。超级麻烦,而且极易出错,因为我们无法特别准确的定位文本现在的编码。于是诞生了下面两个函数。 这两个函数均可以接收1:字符串、2:一维数组、3:多维数组,并将转码后的内容原样返回去! 当我们在进行字符串拼接的时候,一定要把编码转一致了再拼接,否则可能会出现一个字符串,前半部分是UTF-8,后半部分是GBK,这样无论我们怎样转码,都会存在乱码的。 当然还有一个更好的解决办法,就是我们在建立项目的时候,统一建成UTF-8编码,虽然对于中文网站,GBK会节省空间,但是现在硬盘都是白菜价了,没有人再在意这些了。而且使用了UTF-8编码,你再也不用担心外国朋友访问到你的网页会全是乱码了。再而且,现在网站通过接口交互的需求是越来越大,用UTF-8也避免了不少麻烦~~~
/** * 将非GBK字符集的编码转为GBK * * @param mixed $mixed 源数据 * * @return mixed GBK格式数据 */ function charsetToGBK($mixed) { if (is_array($mixed)) { foreach ($mixed as $k => $v) { if (is_array($v)) { $mixed[$k] = charsetToGBK($v); } else { $encode = mb_detect_encoding($v, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5')); if ($encode == 'UTF-8') { $mixed[$k] = iconv('UTF-8', 'GBK', $v); } } } } else { $encode = mb_detect_encoding($mixed, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5')); //var_dump($encode); if ($encode == 'UTF-8') { $mixed = iconv('UTF-8', 'GBK', $mixed); } } return $mixed; }
/** * 将非UTF-8字符集的编码转为UTF-8 * * @param mixed $mixed 源数据 * * @return mixed utf-8格式数据 */ function charsetToUTF8($mixed) { if (is_array($mixed)) { foreach ($mixed as $k => $v) { if (is_array($v)) { $mixed[$k] = charsetToUTF8($v); } else { $encode = mb_detect_encoding($v, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5')); if ($encode == 'EUC-CN') { $mixed[$k] = iconv('GBK', 'UTF-8', $v); } } } } else { $encode = mb_detect_encoding($mixed, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5')); if ($encode == 'EUC-CN') { $mixed = iconv('GBK', 'UTF-8', $mixed); } } return $mixed; }
非常感谢《不靠谱的人生》 提供的方法!原文来自http://www.liyangweb.com/php/202.html
相关文章推荐
- PHP转换编码问题GBK/UTF-8
- PHP中转换编码问题 GBK/UTF-8等
- PHP中文字符gbk编码与UTF-8编码的转换
- 有关编码(GBK、utf-8、iso8859-1、)相互转换问题
- PHP中的GBK与UTF-8等字符串编码形式的自由转换工具iconv
- PHP中的GBK与UTF-8等字符串编码形式的自由转换工具iconv
- 使用java的native2ascii工具命令来转换编码gbk,gb2312,utf-8
- java使用gbk编码读取utf-8的js文件吃掉回车问题
- 黄聪:php传递URL中文编码为带%的编码获取后乱码问题(页面utf-8格式)
- android 项目编码修改, GBK 变UTF-8(进阶版) 编码转换 项目代码转换 转utf-8 转换utf-8
- java GBK UTF-8编码与自动识别与统一(乱码问题)
- ANSI,UNICODE,UTF-8,GB2312,GBK)编码问题(转)
- [Python] 中文编码问题:raw_input输入、文件读取、变量比较等str、unicode、utf-8转换问题
- Python第三方库安装时编码问题utf-8变gbk
- unicode中的‘\xa0’字符在转换成gbk编码时会出现问题,gbk无法转换'\xa0'字符。
- 字符编码和python使用encode,decode转换utf-8, gbk, gb2312的问题
- Linux下批量转换到utf-8编码的问题
- 编码与乱码(05)-GBK与UTF-8之间的转换
- C++文件编码由GBK转换UTF-8的解决方法
- PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码