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

时间:2010-11-10 18:16:48

标签: php encoding utf-8 character-encoding ascii

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

3 个答案:

答案 0 :(得分:11)

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

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

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

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

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

修改

然后最快的可能是mb_check_encoding

function isAscii($str) {
    return mb_check_encoding($str, 'ASCII');
}

答案 1 :(得分:3)

检查是否有任何字节大于0x7f,或者任何字符是否高于U + 007F。

答案 2 :(得分:0)

function isAscii($str) {
    return preg_match('/^([\x00-\x7F])*$/', $str);
}

// doesn't accept ASCII control characters
function isAsciiText($str) {
    return preg_match('/^([\x09\x0A\x0D\x20-\x7E])*$/', $str);
}