关于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 addslashes 函数详细分析说明
Jun 23 PHP
JS 网站性能优化笔记
May 24 PHP
PHP中file_exists与is_file,is_dir的区别介绍
Sep 12 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php生成Android客户端扫描可登录的二维码
May 13 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 PHP
使用composer命令加载vendor中的第三方类库 的方法
Jul 09 PHP
PHP封装请求类实例分析【基于Yii框架】
Oct 17 PHP
PHP fopen中文文件名乱码问题解决方案
Oct 28 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编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
js几个不错的函数 $$()
2006/10/09 Javascript
jquery $.ajax入门应用一
2008/11/19 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
Node.js中使用jQuery的做法
2016/08/17 Javascript
Node.js中用D3.js的方法示例
2017/01/16 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
JS实现不用中间变量temp 实现两个变量值得交换方法
2018/02/04 Javascript
vue 的点击事件获取当前点击的元素方法
2018/09/15 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
JavaScript函数柯里化实现原理及过程
2020/12/02 Javascript
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python爬虫实现简单的爬取有道翻译功能示例
2018/07/13 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
为什么称python为胶水语言
2020/06/16 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
擅自离岗检讨书
2014/02/11 职场文书
政治思想表现评语
2014/05/04 职场文书
法律进社区活动总结
2015/05/07 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android
CSS基础详解
2021/10/16 HTML / CSS