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) 正好可以解決這個問題。
