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学习之运算符相关概念
Jun 09 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
解析PHP可变函数的经典用法
Jun 20 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
简单的php新闻发布系统教程
May 09 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
简单谈谈PHP面向对象之标识对象
Jun 27 PHP
PHP反射实际应用示例
Apr 03 PHP
PHP使用DOM对XML解析处理操作示例
Jul 04 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/15 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
php结合ajax实现手机发红包的案例
2016/10/13 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
JS+CSS实现的经典tab选项卡效果代码
2015/09/16 Javascript
js实现对ajax请求面向对象的封装
2016/01/08 Javascript
jquery判断类型是不是number类型的实例代码
2016/10/07 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
JS实现留言板功能
2017/06/17 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
Vue 页面切换效果之 BubbleTransition(推荐)
2018/04/08 Javascript
webstorm中配置nodejs环境及npm的实例
2018/05/15 NodeJs
jQuery发请求传输中文参数乱码问题的解决方案
2018/05/22 jQuery
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
Python实现基于多线程、多用户的FTP服务器与客户端功能完整实例
2017/08/18 Python
简单了解python的break、continue、pass
2019/07/08 Python
Python continue语句实例用法
2020/02/06 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
萌新HTML5 入门指南(二)
2020/11/09 HTML / CSS
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
团委书记的竞聘演讲稿
2014/04/24 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
消防宣传标语大全
2015/08/03 职场文书
2016年秋季运动会通讯稿
2015/11/25 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
Mysql事务索引知识汇总
2022/03/17 MySQL
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技