关于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分页显示制作详细讲解
Nov 19 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
PHP批量检测并去除文件BOM头代码实例
May 08 PHP
PHP依赖倒置(Dependency Injection)代码实例
Oct 11 PHP
Laravel 5 框架入门(四)完结篇
Apr 09 PHP
PHP cURL初始化和执行方法入门级代码
May 28 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 PHP
PHP基于DOMDocument解析和生成xml的方法分析
Jul 17 PHP
PHP实现打包zip并下载功能
Jun 12 PHP
PHP中md5()函数的用法讲解
Mar 30 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
Apr 14 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
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
表单元素事件 (Form Element Events)
2009/07/17 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
jQuery HTML获取内容和属性操作实例分析
2020/05/20 jQuery
vue实现列表滚动的过渡动画
2020/06/29 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
[00:36]DOTA2勇士令状莱恩声望物品——冥晶之厄展示
2018/05/25 DOTA
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
在Python程序中操作文件之flush()方法的使用教程
2015/05/24 Python
Python多线程下载文件的方法
2015/07/10 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python随机生成手机号、数字的方法详解
2017/07/21 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
python3爬取torrent种子链接实例
2020/01/16 Python
应届大学生求职信
2013/12/01 职场文书
九月份红领巾广播稿
2014/01/22 职场文书
职业女性的职业规划
2014/03/04 职场文书
作风建设演讲稿
2014/05/23 职场文书
体育教育毕业生自荐信
2014/06/29 职场文书
信用卡工资证明格式
2014/09/13 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
鲁迅故里导游词
2015/02/05 职场文书
实习护士自荐信
2015/03/25 职场文书
积极心理学课程心得体会
2016/01/22 职场文书