确定UTF-8文本是否全是ASCII?

phi*_*reo 5 php encoding ascii utf-8 character-encoding

在PHP中,确定某些给定的UTF-8文本是否纯粹是ASCII的最快方法是什么?

irc*_*ell 12

一个可能更快的功能是使用负字符类(因为正则表达式可以在它击中第一个字符时停止,并且不需要内部捕获任何东西):

function isAscii($str) {
    return 0 == preg_match('/[^\x00-\x7F]/', $str);
}
Run Code Online (Sandbox Code Playgroud)

没有正则表达式(基于我的评论){

function isAscii($str) {
    $len = strlen($str) {
    for ($i = 0; $i < $len; $i++) {
        if (ord($str[$i]) > 127) return false;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

但我不得不问,你为什么这么关心更快?使用更易阅读且更易于理解的版本,只有在您知道问题时才会担心优化它...

编辑:

然后最快的可能是mb_check_encoding:

function isAscii($str) {
    return mb_check_encoding($str, 'ASCII');
}
Run Code Online (Sandbox Code Playgroud)