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 相关文章推荐
Smarty+QUICKFORM小小演示
Feb 25 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
推荐一款MAC OS X 下php集成开发环境mamp
Nov 08 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
php如何实现只替换一次或N次
Oct 29 PHP
php+ajax实现无刷新数据分页的办法
Nov 02 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
redirect_uri参数错误的解决方法(必看)
Feb 16 PHP
PHP封装的分页类与简单用法示例
Feb 25 PHP
php判断/计算闰年的方法小结【三种方法】
Jul 06 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伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
a标签的href和onclick 的事件的区别介绍
2013/07/26 Javascript
JavaScript中var关键字的使用详解
2015/08/14 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
js如何获取网页所有图片
2017/05/12 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
vue自定义filters过滤器
2018/04/26 Javascript
Vue-Router基础学习笔记(小结)
2018/10/15 Javascript
小程序根据手机机型设置自定义底部导航距离
2019/06/04 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
Python OS模块常用函数说明
2015/05/23 Python
python numpy 一维数组转变为多维数组的实例
2018/07/02 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
2018/10/29 Python
python中的print()输出
2019/04/12 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
python开发前景如何
2020/06/11 Python
使用CSS3和Checkbox实现JQuery的一些效果
2015/08/03 HTML / CSS
面包店的创业计划书范文
2014/01/16 职场文书
二年级语文教学反思
2014/02/02 职场文书
个人现实表现材料
2014/02/04 职场文书
《都江堰》教学反思
2014/02/07 职场文书
美术指导求职信
2014/03/17 职场文书
老师对学生的评语
2014/04/18 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
2014年幼师工作总结
2014/11/22 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL