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文件下载类
Dec 06 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
php知道与问问的采集插件代码
Oct 12 PHP
通过缓存数据库结果提高PHP性能的原理介绍
Sep 05 PHP
MongoDB在PHP中的常用操作小结
Feb 20 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
Oct 01 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
php结合mysql与mysqli扩展处理事务的方法
Jun 29 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 PHP
PHP数组访问常用方法解析
Sep 05 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数组一对一替换实现代码
2012/08/31 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
jQuery处理xml格式的返回数据(实例解析)
2013/11/28 Javascript
jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别
2013/12/02 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
javascript实现表单验证
2016/01/29 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
jqPlot jQuery绘图插件的使用
2016/06/18 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
2017/07/11 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
Python实现深度遍历和广度遍历的方法
2019/01/22 Python
python爬虫基础之urllib的使用
2020/12/31 Python
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
英国复古服装购物网站:Collectif
2019/10/30 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
高中同学聚会邀请函
2014/01/11 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
没有孩子的离婚协议书怎么写
2014/09/17 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
Vue提供的三种调试方式你知道吗
2022/01/18 Vue.js
MySQL主从切换的超详细步骤
2022/06/28 MySQL