php 检测字符编码代码
发布:smiling 来源: PHP粉丝网 添加日期:2013-11-29 11:29:29 浏览: 评论:0
- function utf8_gb2312($str, $default = 'gb2312')
- {
- $str = preg_replace("/[x01-x7f]+/", "", $str);
- if (emptyempty($str)) return $default;
- $preg = array(
- "gb2312" => "/^([xa1-xf7][xa0-xfe])+$/", //正则判断是否是gb2312
- "utf-8" => "/^[x{4e00}-x{9fa5}]+$/u", //正则判断是否是汉字(utf8编码的条件了),这个范围实际上已经包含了繁体中文字了
- );
- if ($default == 'gb2312') {
- $option = 'utf-8';
- } else {
- $option = 'gb2312';
- }
- if (!preg_match($preg[$default], $str)) {
- return $option;
- }
- $str = @iconv($default, $option, $str);
- //不能转成 $option, 说明原来的不是 $default
- if (emptyempty($str)) {
- return $option;
- }
默认编码是gb2312,而且我统计了一下,90%的情况下都是gb2312,所以,我的检测函数不能出现本来是gb2312的,结果被检测出utf8. 基本思路是:
1. 把所有的ascii去掉,如果全部都是ascii,那么就是gb2312。
2. 假设这个字符串是gb2312,用一个正则检查它是否是真的gb2312,如果不是,那么就是utf-8
3. 然后,用iconv 把字符串转换成utf8,如果转换不成功,那么原来可能不是真正的一个gb2312编码的字符(用正则匹配我已经尽量精确,但是,gb2312的编码不是连续的,还是会有空洞),那么最后的编码就是utf-8.
4. 否则就是gb2312 编码:加入这样的检查功能后,在1000个关键字里面,就出现了1个乱码,比以前的近100个关键字乱码少了很多。
Tags: 检测 字符 编码
相关文章
- ·php中url地址合法性检测函数(2013-12-27)
- ·检测数据类型php函数集(2014-05-23)
- ·php 检测是否为utf-8还是gb2312编码(2014-07-10)
- ·PHP检测注册用户的用户名和密码函数(2014-07-18)
- ·sql 注入字符的检测函数(2014-08-23)
- ·php目录名称合法性检测(2014-09-10)
- ·php检测数组长度的函数sizeof count(2014-09-19)
- ·php检测函数是否存在函数 function_exists(2014-09-20)
- ·自己写了一个php检测文件编码的函数(2020-11-19)
- ·完美的2个php检测字符串是否是utf-8编码函数分享(2021-03-25)
- ·php检测数组长度函数sizeof与count用法(2021-04-26)
- ·php通过function_exists检测函数是否存在的方法(2021-05-16)
- ·php 从字符串中获取URL中获得域名(2013-11-23)
- ·php mb_strlen()中英混体字符截取代码(2013-11-29)
- ·PHP中iconv函数字符串从GBK转换为UTF8字符集(2013-11-29)
- ·PHP判断两个字符串的相似性函数(2013-11-29)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)