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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
php获取错误信息的方法
Jul 17 PHP
PHP异常处理Exception类
Dec 11 PHP
PHP微信支付开发实例
Jun 22 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
Jan 21 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
PHP7移除的扩展和SAPI
Mar 09 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 时间日期操作实战
2011/08/26 PHP
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php生成N个不重复的随机数实例
2013/11/12 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
让焦点自动跳转
2006/07/01 Javascript
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
Array的push与unshift方法性能比较分析
2011/03/05 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
[01:02:18]VGJ.S vs infamous Supermajor 败者组 BO3 第一场 6.4
2018/06/05 DOTA
linux安装Python3.4.2的操作方法
2018/09/28 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
开放系统互连参考模型
2016/06/29 面试题
行政专员岗位职责
2014/01/02 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
小学教学随笔感言
2014/02/26 职场文书
个人委托书
2014/07/31 职场文书
小学安全汇报材料
2014/08/14 职场文书
上课说话检讨书500字
2014/11/01 职场文书
教师学期末个人总结
2015/02/13 职场文书
2015年行政部工作总结
2015/04/28 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
MySQL聚簇索引和非聚簇索引的区别详情
2022/06/14 MySQL