文字列の長さと文字数を調整

strlen()

書式は「strlen(対象文字列);」です。
strlen()はデータのバイト数をカウントします。この関数はバイナリセーフです。また、文字列以外のデータを入れると文字列型に置き換えます。オブジェクトであれば__toStringメソッドがコールされ、メソッドがなければE_WARNINGエラーが返されます。PHPは「__」で始まる関数名を特殊関数として予約しており、__toStringはマジックメソッドの一つです。尚、strlen()での日本語一文字は、3バイトになります。

PHP
1
2
3
4
<?php
$str="phpを使ってみる。";
echo strlen($str);
?>
実行結果:24

mb_strlen()

書式は「mb_strlen(対象文字列 [, エンコーディング]);」です。
mb_strlen()は文字数をカウントします。マルチバイト文字も1バイトとして処理します。第二引数を省略すると内部エンコーディングが採用されます。また、無効なエンコーディングを指定した場合は FALSE を返します。

PHP
1
2
3
4
<?php
$str="phpを使ってみる。";
echo mb_strlen($str);
?>
実行結果:10

str_pad()

書式は「str_pad(対象文字列, 追加数 [, 追加文字, [追加方法]]);」です。
str_pad()は文字列に文字を追加して埋めます。追加方法は、「STR_PAD_RIGHT」「STR_PAD_LEFT」「STR_PAD_BOTH」の三種類です。「STR_PAD_BOTH」は両側でかつ右から追加を始めて、左、右、左、右と順番に追加していきます。「STR_PAD_RIGHT」は右側、「STR_PAD_LEFT」左側に追加します。追加文字と追加方法を指定しなければ右側に半角スペースで埋めます。

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$str="[AIUEO]";
echo '
<pre>'.str_pad($str, 20).'</pre>
';
echo '
<pre>'.str_pad($str, 20, "123456789").'</pre>
';
echo '
<pre>'.str_pad($str, 20, "123456789", STR_PAD_LEFT).'</pre>
';
echo '
<pre>'.str_pad($str, 20, "123456789", STR_PAD_BOTH).'</pre>
';
?>
実行結果:

[AIUEO]             
[AIUEO]1234567891234
1234567891234[AIUEO]
123456[AIUEO]1234567

mb_strwidth()

書式は「mb_strwidth(対象文字列 [, エンコーディング]);」です。
第一引数の文字列は、半角文字を1、全角文字を2としてカウントします。mb_strwidth()におけるマルチバイト文字は、通常シングルバイト文字の倍の幅になりますが、下記のように3バイトのマルチバイト文字が1としてカウントされる例もあります。ちなみに「ॲ」は適当に見つけたマルチバイト文字です。資産という意味があるようです。

PHP
1
2
3
4
5
<?php
echo '「ॲ」は'.strlen('ॲ').'バイトです。';
$str="ॲマルチバイト";
echo mb_strwidth($str);
?>
実行結果:「ॲ」は3バイトです。13

mb_strimwidth()

書式は「mb_strimwidth(対象文字列, 開始位置, 幅 [, 丸めた後に最後尾へ追加する文字列, [エンコーディング]]);」です。
開始位置は文字列を取得する際に左側で切り捨てられる分の文字数で、1バイト文字を1、マルチバイト文字を1としてカウントします。幅は1バイトを1としてカウントし、これには最後尾へ追加する文字も含まれます。幅に負の値を指定すると文字列の末尾からの幅をカウントします。

PHP
1
2
3
4
5
6
7
8
9
<?php
// マルチバイト文字で3バイトの文字の確認
echo '「ॲ」は'.strlen('ॲ').'バイトです。';
// 日本語に混ぜて他言語のマルチバイト文字を二つ入れてます。
$str="ॲマルチバイトのॲ文字を使う";
echo '開始位置を8にした場合「'.mb_strimwidth($str, 8, 6, '。').'」';
echo '開始位置を9にした場合「'.mb_strimwidth($str, 9, 6, '。').'」';
echo '開始位置を10にした場合「'.mb_strimwidth($str, 10, 6, '。').'」';
?>
実行結果:「ॲ」は3バイトです。開始位置を8にした場合「ॲ文。」開始位置を9にした場合「文字。」開始位置を10にした場合「字を。」