PHP計算字符串長度,包括計算英文、GBK、UTF-8多種字符集下PHP如何計算字符串長度。
英文字符串長度,strlen()是PHP自帶的計算英文字符串的函數。
GBK字符串長度
中文字符計算為2個字符,英文字符計算為1個,可以統計中文字符串長度的函數。
function abslength($str) { $len = strlen($str); $i = 0; while ($i < $len) { if (preg_match("/^[" . chr(0xa1) . "-" . chr(0xff) . "]+$/", $str[$i])) { $i += 2; } else { $i += 1; } } return $i; }
UTF8字符串長度
下面定義的strlen_utf8函數可以統計UTF-8字符串的長度,但不同的是,該函數並不考慮字節,這有些類似 Javascript 中字符串的length方法,一個字符全部按 1 個長度計算。
<?php /** * 計算 UTF-8 字符串長度(忽略字節的方案) * * @param string $str * @return int */ function strlen_utf8($str) { $i = 0; $count = 0; $len = strlen($str); while ($i < $len) { $chr = ord($str[$i]); $count++; $i++; if ($i >= $len) { break; } if ($chr & 0x80) { $chr <<= 1; while ($chr & 0x80) { $i++; $chr <<= 1; } } } return $count; } $str = "http://52php.cnblogs.com - PHP博客"; echo strlen_utf8($str); ?>
PHP如何計算短信的長度/字數?
項目中,用到發短信功能,但是每條短信如果字數超過70,會作為一條新的短信發送,所以在記錄發送短信日志時,需要計算下文字個數!
英文、中文統一為一個字來計算,上面的 strlen_utf8($str) 正好可以解決這個問題。