PHP检测字符串是否为UTF8编码的常用方法


Posted in PHP onNovember 21, 2014

本文实例总结了PHP检测字符串是否为UTF8编码的常用方法。分享给大家供大家参考。具体实现方法如下:

检测字符串编码可以有很多种方法,如利用ord获得字符的进制然后进入判断,或利用mb_detect_encoding函数来处理,下面整理了四种常用方法供大家参考。

例子1

/**

* 检测字符串是否为UTF8编码

* @param string $str 被检测的字符串

* @return boolean

*/

function is_utf8($str){

$len = strlen($str);

for($i = 0; $i < $len; $i++){

$c = ord($str[$i]);

if ($c > 128) {

if (($c > 247)) return false;

elseif ($c > 239) $bytes = 4;

elseif ($c > 223) $bytes = 3;

elseif ($c > 191) $bytes = 2;

else return false;

if (($i + $bytes) > $len) return false;

while ($bytes > 1) {

$i++;

$b = ord($str[$i]);

if ($b < 128 || $b > 191) return false;

$bytes--;

}

}

}

return true;

}

例子2
function is_utf8($string) { 

     return preg_match('%^(?: 

             [\x09\x0A\x0D\x20-\x7E]                 # ASCII 

         | [\xC2-\xDF][\x80-\xBF]                 # non-overlong 2-byte 

         |     \xE0[\xA0-\xBF][\x80-\xBF]             # excluding overlongs 

         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}     # straight 3-byte 

         |     \xED[\x80-\x9F][\x80-\xBF]             # excluding surrogates 

         |     \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3 

         | [\xF1-\xF3][\x80-\xBF]{3}             # planes 4-15 

         |     \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16 

     )*$%xs', $string);      

}

准确率基本和mb_detect_encoding()一样,要对一起对,要错一起错。
编码检测不可能100%准确,这个东西已经可以基本满足要求了。
例子3
function mb_is_utf8($string)   

{   

    return mb_detect_encoding($string, 'UTF-8') === 'UTF-8';//新发现   

}

例子4

// Returns true if $string is valid UTF-8 and false otherwise.   

function is_utf8($word)   

{   

if (preg_match("/^([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){1}$/",$word) == true || preg_match("/([".chr(228)."-".chr(233)."]{1}[".chr(128)."-".chr(191)."]{1}[".chr(128)."-".chr(191)."]{1}){2,}/",$word) == true)   

{   

return true;   

}   

else   

{   

return false;   

}   

} // function is_utf8

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

PHP 相关文章推荐
PHP4之真OO
Oct 09 PHP
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
解析PHP 5.5 新特性
Jul 02 PHP
Yii获取当前url和域名的方法
Jun 08 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
浅谈PHP中其他类型转化为Bool类型
Mar 28 PHP
PHP实现生成模糊图片的方法示例
Dec 21 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PHP xpath()函数讲解
Feb 11 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
php7 list()、session及其他模块的修改实例分析
May 25 PHP
php防止恶意刷新与刷票的方法
Nov 21 #PHP
php采用curl实现伪造IP来源的方法
Nov 21 #PHP
php文件缓存类汇总
Nov 21 #PHP
php实现事件监听与触发的方法
Nov 21 #PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 #PHP
IIS下PHP的三种配置方式对比
Nov 20 #PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 #PHP
You might like
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
php while循环控制的简单实例
2016/05/30 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
window.parent与window.openner区别介绍
2012/04/12 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
python连接池实现示例程序
2013/11/26 Python
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
wxPython窗口的继承机制实例分析
2014/09/28 Python
详解Python 数据库的Connection、Cursor两大对象
2018/06/25 Python
python使用Matplotlib画饼图
2018/09/25 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
一些常用的HTML5模式(pattern) 总结
2015/07/14 HTML / CSS
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
读群众路线心得体会
2014/03/07 职场文书
银行进社区活动总结
2014/07/07 职场文书
代收款委托书范本
2014/10/01 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
实习指导老师意见
2015/06/04 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL