PHP自动识别字符集并完成转码详解


Posted in PHP onAugust 02, 2013

因为自己使用字符编码一般的是utf-8编码,但如果对方的博客使用gb2312编码的话,POST过来就会出现乱码(除非对方POST前先转换编码)。在不能保证对方是否一定使用utf-8编码的情况下,自己做一个编码的检查和转换是很有必要的。

写了个函数来完成这个工作,原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。

如果是文件形式的编码检查,还可以直接check utf-8的BOM信息,关于这方面的东西,大家可以看看TP工具箱的编码转换功能,我在那个AppCodingSwitch类中写了比较详细的注释。

话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。文件的检查与转码

function safeEncoding($string, $outEncoding = 'UTF-8') {
    $encoding = "UTF-8";
    for ($i = 0; $i < strlen($string); $i++) {
        if (ord($string{$i}) < 128)
            continue;
        if ((ord($string{$i}) & 224) == 224) {
            //第一个字节判断通过 
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                //第二个字节判断通过 
                $char = $string{++$i};
                if ((ord($char) & 128) == 128) {
                    $encoding = "UTF-8";
                    break;
                }
            }
        }
        if ((ord($string{$i}) & 192) == 192) {
            //第一个字节判断通过 
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                //第二个字节判断通过 
                $encoding = "GB2312";
                break;
            }
        }
    }
    if (strtoupper($encoding) == strtoupper($outEncoding))
        return $string;
    else
        returniconv($encoding, $outEncoding, $string);
}

PHP 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
php下检测字符串是否是utf8编码的代码
Jun 28 PHP
php checkbox 取值详细说明
Aug 19 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
Apr 24 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
PHP模板引擎Smarty之配置文件在模板变量中的使用方法示例
Apr 11 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
PHP实现根据浏览器跳转不同语言页面代码
Aug 02 #PHP
php实现查询百度google收录情况(示例代码)
Aug 02 #PHP
浅析PHP Socket技术
Aug 02 #PHP
php中如何防止表单的重复提交
Aug 02 #PHP
浅析51个PHP处理字符串的函数
Aug 02 #PHP
php中的常用魔术方法总结
Aug 02 #PHP
深入解析Session是否必须依赖Cookie
Aug 02 #PHP
You might like
php生成图形验证码几种方法小结
2013/08/15 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
查询json的数据结构的8种方式简介
2014/03/10 Javascript
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
vue.js单页面应用实例的简单实现
2017/04/10 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
jQuery实现简单QQ聊天框
2020/08/27 jQuery
javascript canvas封装动态时钟
2020/09/30 Javascript
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
[51:44]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第二场
2018/04/04 DOTA
Python自动扫雷实现方法
2015/07/25 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
妙用itchat! python实现久坐提醒功能
2019/11/25 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
3个CCIE对一个工程师的面试题
2012/05/06 面试题
JAVA高级程序员面试题
2013/09/06 面试题
法学院毕业生求职信
2014/06/25 职场文书
乡镇消防安全责任书
2014/07/23 职场文书
基层党员对照检查材料
2014/08/25 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
雷峰塔导游词
2015/02/09 职场文书
学历证明范文
2015/06/16 职场文书
小程序后台PHP版本部署运行 LNMP+WNMP
2021/04/01 Servers
Python中异常处理用法
2021/11/27 Python
MySQL优化及索引解析
2022/03/17 MySQL