关于PHP自动判断字符集并转码的详解


Posted in PHP onJune 26, 2013

原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围。而英文不 管在何种编码情况下,都是小于128,只占用一个字节(全角除外)。
如果是文件形式的编码检查,还可以直接check utf-8的BOM信息。话不多说,直接上函数,这个函数是用来对字符串进行检查和转码的。

<?php
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   
        return iconv($encoding,$outEncoding,$string);    
}
?>

PHP 相关文章推荐
PHP网站提速三大“软”招
Oct 09 PHP
用PHP实现多服务器共享SESSION数据的方法
Mar 16 PHP
PHP 5.0对象模型深度探索之对象复制
Mar 27 PHP
php 清除网页病毒的方法
Dec 05 PHP
php建立Ftp连接的方法
Mar 07 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
yii分页组件用法实例分析
Dec 28 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
解决laravel session失效的问题
Oct 14 PHP
php去除deprecated的实例方法
Nov 17 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 #PHP
php 批量生成html,txt文件的实现代码
Jun 26 #PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 #PHP
解析strtr函数的效率问题
Jun 26 #PHP
如何在smarty中增加类似foreach的功能自动加载数据
Jun 26 #PHP
编写Smarty插件在模板中直接加载数据的详细介绍
Jun 26 #PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 #PHP
You might like
PHP+MySQL投票系统的设计和实现分享
2012/09/23 PHP
基于php权限分配的实现代码
2013/04/28 PHP
php旋转图片90度的方法
2013/11/07 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP中Closure类的使用方法及详解
2015/10/09 PHP
php实现无限级分类查询(递归、非递归)
2016/03/10 PHP
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
基于JQuery 选择器使用说明介绍
2013/04/18 Javascript
javascript中RegExp保留小数点后几位数的方法分享
2013/08/13 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
jquery html动态生成select标签出问题的解决方法
2013/11/20 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
前端框架Vue.js中Directive知识详解
2016/09/12 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
ES6知识点整理之模块化的应用详解
2019/04/15 Javascript
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
关于Django外键赋值问题详解
2017/08/13 Python
Python设计模式之装饰模式实例详解
2019/01/21 Python
Kipling意大利官网:世界著名的时尚休闲包袋品牌
2019/06/05 全球购物
模具设计与制造专业应届生求职信
2013/10/18 职场文书
酒吧创业计划书
2014/01/18 职场文书
机械设计及其自动化求职推荐信
2014/02/17 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
领导干部保密承诺书
2014/08/30 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
2014年信用社工作总结
2014/11/25 职场文书
会计岗位职责
2015/02/03 职场文书
食品安全主题班会
2015/08/13 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏