ホームページ >php教程 >php手册 >strlen および mb_strlen 文字列長関数

strlen および mb_strlen 文字列長関数

WBOY
WBOYオリジナル
2016-06-21 08:57:141326ブラウズ

PHP を知っている人なら strlen と mb_strlen が文字列の長さを調べる関数であることは知っていますが、初心者にとってはマニュアルを読まないと違いがよくわからない人もいるかもしれません。

PHP を知っている人なら誰でも、strlen と mb_strlen が文字列の長さを調べる関数であることを知っていますが、初心者の中にはマニュアルを読まないと違いがよくわからない人もいます。
まずこのコード部分を見てみましょう (前提条件: 文字エンコーディングは UTF-8 です):

$str = 'PHP を知っている人なら誰でも、strlen と mb_strlen が文字列の長さを調べる関数であることを知っています';
echo strlen($str)'.
'.mb_strlen($str,'utf-8');
?>

上記のコードを実行すると、戻り値は次のようになります:
66
34

どうですか? strlen では、中国語の長さは 3 バイト、英語の長さは 1 バイトです。 mb_strlen では、これらはすべて 1 バイトの長さとして計算されます。そのため、substr を使用して UTF-8 中国語文字列をインターセプトすると、文字化けが頻繁に発生します。これが原因です。
UTF-8 文字列をインターセプトする関数は以下に提供されます:

関数cutstr($sourcestr,$cutlength){
$returnstr = '';
$i = 0;
$n = 0;
$str_length = strlen($sourcestr);
$mb_str_length = mb_strlen($sourcestr,'utf-8');
while(($n $temp_str = substr($sourcestr,$i,1);
$ascnum = ord($temp_str);
if($ascnum >= 224){
$returnstr = $returnstr.substr($sourcestr,$i,3);
$i = $i + 3;
$n++;
}
elseif($ascnum >= 192){
$returnstr = $returnstr.substr($sourcestr,$i,2);
$i = $i + 2;
$n++;
}
elseif(($ascnum >= 65) && ($ascnum <= 90)){
$returnstr = $returnstr.substr($sourcestr,$i,1);
$i = $i + 1;
$n++;
}
それ以外{
$returnstr = $returnstr.substr($sourcestr,$i,1);
$i = $i + 1;
$n = $n + 0.5;
}
}
if ($mb_str_length > $cutlength){
$returnstr = $returnstr . "...";
}
$returnstr を返します
}

使用例:

$str = '有効期間は最大 3 か月です。有効期間が経過すると、この情報はシステムによって自動的に削除されます。';
//エコー strlen($str);
//エコー '


'.mb_strlen($str,'utf-8');
echo '
'.$str;
echo '
'.cutstr($str,24);
?>



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。