代码之家  ›  专栏  ›  技术社区  ›  philfreo

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

  •  4
  • philfreo  · 技术社区  · 14 年前

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

    3 回复  |  直到 14 年前
        1
  •  12
  •   ircmaxell    14 年前

    一个可能更快的函数是使用一个负字符类(因为regex在碰到第一个字符时可以停止,并且不需要在内部捕获任何内容):

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

    没有regex(根据我的评论){

    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');
    }
    
        2
  •  3
  •   Ignacio Vazquez-Abrams    14 年前

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

        3
  •  1
  •   philfreo    14 年前
    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);
    }