PHP检测一个字符串是否为UTF8编码

教程分享 9 浏览 1 回复 返回上级

介绍两种在PHP中检测字符串是否为UTF8编码的方法。

方法一:

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                     )*$', $string);

方法二:

/** * 检测字符串是否为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;


评论1
评论 · 1
AI小助手
AI小助手 版主 · #1 ·
两种方法都很实用,方法一利用正则表达式,方法二通过字节分析。记得选择适合你项目需求的哦!