php自动识别文字编码并转换为目标编码的方法


Posted in PHP onAugust 08, 2015

本文实例讲述了php自动识别文字编码并转换为目标编码的方法。分享给大家供大家参考。具体如下:

在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但,这其实是有一个前提的。即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换。

虽然大多数转换都是在gbk和utf-8之间转,但如果不知道转换对象的编码怎么办呢?谷歌出来这么一个函数safeEncoding,可以简单的识别UTF8和GBK的编码。这个函数在一定程度上识别的很准确,但是在一些比较复杂的环境中就不是那么的好用了. 下面我结合了GBK和UTF-8编码的不同点,使用正则表达式来判断UTF-8编码并使用mb_convert_encoding函数来进行转换. 在国内,基本上比较流行的编码就是GBK和UTF-8, 所以这个函数是针对这两个编码进行自动转换的.

/**
* @ string 需要转换的文字
* @ encoding 目标编码
**/
function detect_encoding($string,$encoding = 'gbk'){
 $is_utf8 = preg_match('%^(?:[\x09\x0A\x0D\x20-\x7E]| [\xC2-\xDF][\x80-\xBF]| \xE0[\xA0-\xBF][\x80-\xBF] | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  | \xED[\x80-\x9F][\x80-\xBF] | \xF0[\x90-\xBF][\x80-\xBF]{2} | [\xF1-\xF3][\x80-\xBF]{3} | \xF4[\x80-\x8F][\x80-\xBF]{2} )*$%xs', $string);
 if($is_utf8 && $encoding == 'utf8'){
  return $string;
 }elseif($is_utf8){
  return mb_convert_encoding($string, $encoding, "UTF-8");
 }else{
  return mb_convert_encoding($string, $encoding, 'gbk,gb2312,big5');
 }
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP 获取远程文件内容的函数代码
Mar 24 PHP
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
Oct 31 PHP
PHP函数preg_match_all正则表达式的基本使用详细解析
Aug 31 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
php中的常用魔术方法汇总
Feb 14 PHP
php图形jpgraph操作实例分析
Feb 22 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
php微信开发之关注事件
Jun 14 PHP
浅谈PHP中的Trait使用方法
Mar 22 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 PHP
php 策略模式原理与应用深入理解
Sep 25 PHP
在laravel中使用with实现动态添加where条件
Oct 10 PHP
PHP模拟asp中response类实现方法
Aug 08 #PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 #PHP
PHP中使用curl伪造IP的简单方法
Aug 07 #PHP
smarty中常用方法实例总结
Aug 07 #PHP
php递归函数三种实现方法及如何实现数字累加
Aug 07 #PHP
PHP下载生成的csv文件及问题总结
Aug 06 #PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 #PHP
You might like
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
2014/11/12 PHP
CodeIgniter分页类pagination使用方法示例
2016/03/28 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP常用日期加减计算方法实例小结
2018/07/31 PHP
json-lib出现There is a cycle in the hierarchy解决办法
2010/02/24 Javascript
Javascript事件热键兼容ie|firefox
2010/12/30 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
2020/07/27 Javascript
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
python基于socket函数实现端口扫描
2020/05/28 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
几道Java和数据库的面试题
2013/05/30 面试题
会计专业毕业自荐书范文
2014/02/08 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
实习生工作证明范本
2014/09/14 职场文书
2014年9.18纪念日演讲稿
2014/09/14 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
婚内分居协议书范文
2014/11/26 职场文书
助学金感谢信
2015/01/20 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
2016年心理学教育培训学习心得体会
2016/01/12 职场文书
《观潮》教学反思
2016/02/17 职场文书
解决SpringBoot文件上传临时目录找不到的问题
2021/07/01 Java/Android
python数字图像处理之图像的批量处理
2022/06/28 Python