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实现登陆验证码(类似条行码状)
Oct 09 PHP
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
mysql5的sql文件导入到mysql4的方法
Oct 19 PHP
php下通过伪造http头破解防盗链的代码
Jul 03 PHP
解析php中heredoc的使用方法
Jun 17 PHP
php登陆页的密码处理方式分享
Oct 14 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
Dec 29 PHP
thinkPHP导出csv文件及用表格输出excel的方法
Dec 30 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
浅析PHP开发规范
Feb 05 PHP
PHP设计模式之装饰器模式实例详解
Feb 07 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报错configure error Cannot find libmysqlclient under usr的解决方法
2014/06/27 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
一段实用的php验证码函数
2016/05/19 PHP
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
2015/11/27 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
举例讲解Python中is和id的用法
2015/04/03 Python
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Python Property属性的2种用法
2015/06/21 Python
python中单下划线_的常见用法总结
2018/07/10 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
Python 解决火狐浏览器不弹出下载框直接下载的问题
2020/03/09 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
delegate与普通函数的区别
2014/01/22 面试题
高校毕业生自我鉴定
2013/10/27 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
演讲比赛获奖感言
2014/02/02 职场文书
学用政策心得体会
2014/09/10 职场文书
2015年实习生工作总结报告
2015/04/28 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
导游词之湖州-太湖
2019/10/11 职场文书
使用pandas模块实现数据的标准化操作
2021/05/14 Python