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与已存在的Java应用程序集成
Oct 09 PHP
PHP脚本数据库功能详解(中)
Oct 09 PHP
php+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
Jan 20 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
php中socket通信机制实例详解
Jan 03 PHP
PHP超牛逼无限极分类生成树方法
May 11 PHP
使用php实现从身份证中提取生日
May 09 PHP
WordPress中的shortcode短代码功能使用详解
May 17 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 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简单实现加减乘除计算器
2014/01/06 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
destoon网站转移服务器后搜索汉字出现乱码的解决方法
2014/06/21 PHP
php实现事件监听与触发的方法
2014/11/21 PHP
JS 统计时间
2021/03/09 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
jquery限定文本框只能输入数字即整数和小数
2013/11/29 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
Jquery如何实现点击时高亮显示代码
2014/01/22 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
JavaScript函数柯里化详解
2016/04/29 Javascript
Jquery修改image的src属性,图片不加载问题的解决方法
2016/05/17 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
Bootstrap 3多级下拉菜单实例
2017/11/23 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
vue单页应用的内存泄露定位和修复问题小结
2019/08/02 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
[03:14]辉夜杯主赛事 12月25日每日之星
2015/12/26 DOTA
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
Python中实现结构相似的函数调用方法
2015/03/10 Python
python flask 多对多表查询功能
2017/06/25 Python
Python工程师面试必备25条知识点
2018/01/17 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
python switch 实现多分支选择功能
2020/12/21 Python
基层党组织公开承诺书
2014/03/28 职场文书
学生自我评语大全
2014/04/18 职场文书
人事专员岗位职责
2015/02/03 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技
Nginx利用Logrotate实现日志分割
2022/05/20 Servers
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS