关于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 函数中使用static的说明
Jun 01 PHP
php使用正则表达式获取图片url的方法
Jan 16 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
浅析Yii2中GridView常见操作
Apr 22 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
详解php实现页面静态化原理
Jun 21 PHP
PHP写API输出的时用echo的原因详解
Apr 28 PHP
ThinkPHP5&amp;5.1框架关联模型分页操作示例
Aug 03 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 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源码之 ext/mysql扩展部分
2009/07/17 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
支付宝接口开发集成支付环境小结
2015/03/17 PHP
php实现点击可刷新验证码
2015/11/07 PHP
深入php内核之php in array
2015/11/10 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
用javascript获取textarea中的光标位置
2008/05/06 Javascript
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JavaScript初学者应注意的七个细节详细介绍
2012/12/27 Javascript
浅析document.createDocumentFragment()与js效率
2013/07/08 Javascript
js操作IE浏览器弹出浏览文件夹可以返回目录路径
2014/07/14 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
基于twbsPagination.js分页插件使用心得(分享)
2017/10/21 Javascript
JS实现字符串去重及数组去重的方法示例
2018/04/21 Javascript
微信开发之企业付款到银行卡接口开发的示例代码
2018/09/18 Javascript
nodejs基础之多进程实例详解
2018/12/27 NodeJs
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
2019/04/22 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
介绍Python中几个常用的类方法
2015/04/08 Python
Python实现的简单算术游戏实例
2015/05/26 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
在Python中增加和插入元素的示例
2018/11/01 Python
浅谈python标准库--functools.partial
2019/03/13 Python
python判断链表是否有环的实例代码
2020/01/31 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
施华洛世奇西班牙官网:SWAROVSKI西班牙
2019/06/06 全球购物
美国购买舞会礼服网站:Couture Candy
2019/12/29 全球购物
优秀党员转正的自我评价
2013/10/06 职场文书
大型晚会策划方案
2014/02/06 职场文书
工艺员岗位职责
2014/02/11 职场文书
共产党员承诺书
2014/03/25 职场文书