关于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 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
粗略计算在线时间,bug:ip相同
Dec 09 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
PHP5.3与5.5废弃与过期函数整理汇总
Jul 10 PHP
php中chdir()函数用法实例
Nov 13 PHP
经典PHP加密解密函数Authcode()修复版代码
Apr 05 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
Jun 07 PHP
php+ajax实现仿百度查询下拉内容功能示例
Oct 20 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
php的命名空间与自动加载实现方法
Aug 25 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设计模式 FlyWeight (享元模式)
2011/06/26 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
PHP fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
js中判断数字\字母\中文的正则表达式 (实例)
2012/06/29 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
jquery实现表格本地排序的方法
2015/03/11 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
JavaScript中的对象和原型(一)
2016/08/12 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
详解在express站点中使用ejs模板引擎
2017/09/21 Javascript
JavaScript实现单例模式实例分享
2017/12/22 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
layui表单提交到后台自动封装到实体类的方法
2019/09/12 Javascript
JavaScript实现随机点名器
2020/03/25 Javascript
Vue实现多页签组件
2021/01/14 Vue.js
python实现从ftp服务器下载文件的方法
2015/04/30 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
在python3.5中使用OpenCV的实例讲解
2018/04/02 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python nmap实现端口扫描器教程
2020/05/28 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
浅谈matplotlib 绘制梯度下降求解过程
2020/07/12 Python
python中取绝对值简单方法总结
2020/07/24 Python
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
保安员岗位职责
2013/11/17 职场文书
教师考察材料范文
2014/06/03 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书