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 版本]
Mar 20 PHP
让PHP支持页面回退的两种方法
Jan 10 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
php计算几分钟前、几小时前、几天前的几个函数、类分享
Apr 09 PHP
PHP中的use关键字概述
Jul 23 PHP
php实现webservice实例
Nov 06 PHP
PHP翻页跳转功能实现方法
Nov 30 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 PHP
CodeIgniter框架实现的整合Smarty引擎DEMO示例
Mar 28 PHP
Laravel路由研究之domain解决多域名问题的方法示例
Apr 04 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
星际争霸任务指南——神族
2020/03/04 星际争霸
PHP安全下载文件的方法
2016/04/07 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
PHP实现的mysql操作类【MySQL与MySQLi方式】
2017/10/07 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
Angular2库初探
2017/03/01 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
node.js基础知识汇总
2020/08/25 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
python基础教程之面向对象的一些概念
2014/08/29 Python
Python计算字符宽度的方法
2016/06/14 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
2017/04/17 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
.net面试题
2016/09/17 面试题
QA工程师岗位职责
2013/11/20 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
优秀大学生的自我评价
2014/01/16 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
生物学专业求职信
2014/07/23 职场文书
慈善募捐倡议书
2015/04/27 职场文书
JavaScript阻止事件冒泡的方法
2021/12/06 Javascript
Java数组详细介绍及相关工具类
2022/04/14 Java/Android
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL