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 相关文章推荐
Ajax PHP 边学边练 之三 数据库
Nov 26 PHP
php下把数组保存为文件格式的实例应用
Feb 08 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
基础的WordPress插件制作教程
Nov 24 PHP
Yii中创建自己的Widget实例
Jan 05 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
php记录搜索引擎爬行记录的实现代码
Mar 02 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 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
php随机输出名人名言的代码
2012/10/07 PHP
php使用异或实现的加密解密实例
2013/09/04 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
PHP 将数组打乱 shuffle函数的用法及简单实例
2016/06/17 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
iview table render集成switch开关的实例
2018/03/14 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
Django中URL视图函数的一些高级概念介绍
2015/07/20 Python
Python计时相关操作详解【time,datetime】
2017/05/26 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python抓取文件夹的所有文件
2018/02/27 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Python设计模式之职责链模式原理与用法实例分析
2019/01/11 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
Python reques接口测试框架实现代码
2020/07/28 Python
pandas apply多线程实现代码
2020/08/17 Python
python switch 实现多分支选择功能
2020/12/21 Python
php优化查询foreach代码实例讲解
2021/03/24 PHP
实习报告范文
2019/07/30 职场文书
Android Gradle 插件自定义Plugin实现注意事项
2022/06/16 Java/Android