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 相关文章推荐
Linux下ZendOptimizer的安装与配置方法
Apr 12 PHP
PHP开启gzip页面压缩实例代码
Mar 11 PHP
php 上传功能实例代码
Apr 13 PHP
php流量统计功能的实现代码
Sep 29 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
Jun 18 PHP
linux使用crontab实现PHP执行计划定时任务
May 10 PHP
php返回json数据函数实例
Oct 09 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
php cookie用户登录的详解及实例代码
Jan 03 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
详解php中serialize()和unserialize()函数
Jul 08 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模块 Memcached功能多于Memcache
2011/06/14 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
2014/06/19 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
webpack配置文件和常用配置项介绍
2017/04/28 Javascript
vue.js学习之vue-cli定制脚手架详解
2017/07/02 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
JavaScript Dom实现轮播图原理和实例
2021/02/19 Javascript
[02:53]DOTA2英雄昆卡基础教程
2013/11/25 DOTA
Python使用Flask框架获取当前查询参数的方法
2015/03/21 Python
解决python flask中config配置管理的问题
2019/07/26 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
Lacoste美国官网:经典POLO衫品牌
2016/10/12 全球购物
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
青年文明号复核材料
2014/02/11 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
《学会合作》教学反思
2014/04/12 职场文书
医德医风自我评价
2014/09/19 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
后进生评语大全
2015/01/04 职场文书
2015年保管员工作总结
2015/04/30 职场文书
为自己工作观后感
2015/06/11 职场文书
2016年教师节慰问信
2015/12/01 职场文书
2016年中学端午节主题活动总结
2016/04/01 职场文书
pytorch 6 batch_train 批训练操作
2021/05/28 Python