关于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中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
PHP中Header使用的HTTP协议及常用方法小结
Nov 04 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
php实现word转html的方法
Jan 22 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
正确的PHP匹配UTF-8中文的正则表达式
2015/05/13 PHP
多广告投放代码 推荐
2006/11/13 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
JS跨域总结
2012/08/30 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
固定表格行列(expression)在IE下适用
2013/07/25 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
javascript实现信息增删改查的方法
2015/07/25 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
浅谈Angularjs link和compile的使用区别
2016/10/21 Javascript
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
iscroll.js滚动加载实例详解
2017/07/18 Javascript
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
webpack打包html里面img后src为“[object Module]”问题
2019/12/22 Javascript
原生javascript中this几种常见用法总结
2020/02/24 Javascript
JS数组的常用10种方法详解
2020/05/08 Javascript
Python进阶之尾递归的用法实例
2018/01/31 Python
解决python中无法自动补全代码的问题
2018/12/04 Python
详解Python中的正斜杠与反斜杠
2019/08/09 Python
python中字典增加和删除使用方法
2020/09/30 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
护理学中专毕业生求职信
2013/11/11 职场文书
办公室前台岗位职责
2014/01/04 职场文书
费用申请报告范文
2015/05/15 职场文书
试了下Golang实现try catch的方法
2021/07/01 Golang
python_tkinter事件类型详情
2022/03/20 Python