关于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实现文件安全下载
Oct 09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
PHP生成RSS文件类实例
Dec 05 PHP
PHP7.0安装笔记整理
Aug 28 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
PHP模板引擎Smarty内置变量调解器用法详解
Apr 11 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
mac系统下安装多个php并自由切换的方法详解
Apr 21 PHP
php微信开发之关键词回复功能
Jun 13 PHP
php接口隔离原则实例分析
Nov 11 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类
2006/11/27 PHP
用php制作简单分页(从数据库读取记录)的方法详解
2013/05/04 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
JS 继承实例分析
2008/11/04 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
JS和canvas实现俄罗斯方块
2017/03/14 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
简单上手Python中装饰器的使用
2015/07/12 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
django celery redis使用具体实践
2019/04/08 Python
使用python模拟高斯分布例子
2019/12/09 Python
Python简单实现区域生长方式
2020/01/16 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
英国最大的在线蜡烛商店:Candles Direct
2019/03/26 全球购物
先进集体获奖感言
2014/02/13 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
2019同学聚会主持词
2019/05/06 职场文书
个人销售励志奋斗口号
2019/12/05 职场文书
CSS 伪元素::marker详解
2021/06/26 HTML / CSS