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 相关文章推荐
PHP利用COM对象访问SQLServer、Access
Oct 09 PHP
php中取得文件的后缀名?
Feb 20 PHP
PHP 面向对象详解
Sep 13 PHP
PHP获取当前页面URL函数实例
Oct 22 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
Mar 27 PHP
php实现SAE上使用storage上传与下载文件的方法
Jun 29 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
Oct 20 PHP
PHP内核探索之解释器的执行过程
Dec 22 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 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
PHP设计模式之解释器模式的深入解析
2013/06/13 PHP
PHP中exec函数和shell_exec函数的区别
2014/08/20 PHP
php中get_object_vars()方法用法实例
2015/02/08 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
jQuery实现ajax的叠加和停止(终止ajax请求)
2016/08/08 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
Node.js连接MongoDB数据库产生的问题
2017/02/08 Javascript
BootStrap的select2既可以查询又可以输入的实现代码
2017/02/17 Javascript
浅析vue component 组件使用
2017/03/06 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
2017/06/25 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
基于vue-resource jsonp跨域问题的解决方法
2018/02/03 Javascript
浅谈Vue.js之初始化el以及数据的绑定说明
2019/11/14 Javascript
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
2019/08/08 Python
python conda操作方法
2019/09/11 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
美国户外服装和装备购物网站:Outland USA
2020/03/22 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
如何写好升职自荐信
2014/01/06 职场文书
小学毕业寄语大全
2014/04/03 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
群教个人对照检查材料
2014/08/20 职场文书
上课不认真检讨书
2014/09/17 职场文书
交通违章检讨书
2014/09/21 职场文书
2014年教务工作总结
2014/12/03 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
Python 如何将integer转化为罗马数(3999以内)
2021/06/05 Python