note 88967 deleted from function.strlen by hholzgra

From: Date: Thu, 02 Aug 2012 12:15:48 +0000
Subject: note 88967 deleted from function.strlen by hholzgra
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-189619@lists.php.net to get a copy of this message
Note Submitter: Anonymous ---- simple speed test for UTF-8 strings: <?php header("Content-type: text/html; charset=UTF-8"); ini_set('mbstring.internal_encoding', 'UTF-8'); ?><pre><? function utf8_strlen($s) { $c = strlen($s); $l = 0; for ($i = 0; $i < $c; ++$i) if ((ord($s[$i]) & 0xC0) != 0x80) ++$l; return $l; } function utf0_strlen($s) { $l = 0; $i = 0; while ($n = ord($s[$i++])) if (($n & 0xC0) != 0x80) ++$l; return $l; } function utfs_strlen($s) { $c = strlen($s); $l = 0; for($i = 0; $i < $c; $i++) { $v = ord($s[$i]); if($v > 127) { if($v >= 192 && $v <= 223) ++$i; elseif($v >= 224 && $v <= 239) $i += 2; elseif($v >= 240 && $v <= 247) $i += 3; else die('Not a UTF-8 compatible string'); } ++$l; } return $l; } function spl_strlen($s) { return count(preg_split("//u", $s)) - 2; } function dcd_strlen($s) { return strlen(utf8_decode($s)); } function preg_strlen($s) { return preg_match_all('/[\x00-\x7F\xC0-\xFD]/', $s, $d); } $src = '=123! !ы"в#$%&\'()*+,—./:;<=>?@[\]^_`{|}~'. ' йцукенгшщзхъфывапролджтьбю'.chr(0).'ы'; $tc = 10000; //test count $l = mb_strlen($src, 'UTF-8'); //real testing string length $lst = array('strlen', 'mb_strlen', 'dcd_strlen', 'preg_strlen', 'utfs_strlen', 'utf8_strlen', 'utf0_strlen', 'spl_strlen'); // list of functions foreach ($lst as $f) { $t = microtime(1); for($i = 0; $i < $tc; $i++) $f($src); $t = microtime(1) - $t; printf("%14s : %0.6f : %03u%s\n", $f, $t, $q = $f($src), $q != $l ? ' - failed!' : ''); } ?></pre> main results: strlen : 0.009419 : 112 failed! mb_strlen : 0.016377 : 075 dcd_strlen : 0.063055 : 075 preg_strlen : 1.106809 : 075 utfs_strlen : 1.701586 : 075 utf8_strlen : 2.321344 : 075 utf0_strlen : 2.578518 : 073 failed! spl_strlen : 3.789029 : 075

« previous php.notes (#189619) next »