第8章 文字列

8.2 文字列の長さを調べる

 文字列の長さを使って正しい文字数に収まっているかを確認する入力チェックがあります。この時に使うのがstrlen()関数とmb_strlen()関数です。

8.2.1 strlen()関数とmb_strlen()関数

 strlen()関数は、引数として渡された文字列の長さを返す関数です。

凡例:strlen()関数の呼び出し方

 よく使われる便利な関数のうちの一つですが、日本語についてはうまくカウントできない(文字数の代わりにバイト数が戻ってくる)というデメリットもあります。
 そのため日本語の文字列の長さを求める際には、代わりにmb_strlen()関数を使います。mb_が先頭につく関数はマルチバイト文字列関数といい、日本語の文字列操作は基本的にこのmb_から始まる関数を使います。

凡例:mb_strlen()関数の呼び出し方

8.2.2 文字列の長さを調べるプログラム

 文字列の長さをstrlen()関数とmb_strlen()関数を使って調べるプログラムです。

ソースコード

ソース・フォルダー  :myproj_framework_basic/ch08
ファイル名      :strlen.php
アクセスURL    :http://localhost/myproj_framework_basic/ch08/strlen.php

➢ strlen.php

1<?php
2    // 長さを出力する文字列を用意
3    $strArray = array("pencil", "pen2", "ケシゴム" ,"定規");
4     
5    // マルチバイト文字列関数を使う準備
6    mb_language("ja"); // 日本語
7    mb_internal_encoding("UTF-8"); // 文字コード
8?>
9<html>
10    <head>
11        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
12        <title>文字列の長さを調べる</title>
13    </head>
14      <body>
15        <table>
16            <tr>
17                <th>文字列</th>
18                <th>strlen</th>
19                <th>mb_strlen</th>
20            </tr>
21            <?php
22            foreach($strArray as $val){
23                    // 文字列とその長さを出力する
24                    echo "<tr>";
25                    echo"<td>" . $val . "</td>";
26                    echo"<td>" . strlen($val) . "</td>";
27                    echo"<td>" . mb_strlen($val) . "</td>";
28                    echo "</tr>";
29                }
30            ?>
31        </table>
32    </body>
33</html>

実行結果

解説
 このstrlen.phpは、3行目で用意した配列に格納されている文字列の長さをstrlen()関数とmb_strlen()関数を使って出力しています。また、mb_strlen()関数を使う前準備を6~7行目で行っています。

 今回、文字列は4個用意されていました。半角英数字で構成されている「pencil」と「pen2」についてはstrlen()関数でもmb_strlen()関数でも正しく文字列の長さがカウントされています。日本語の「ケシゴム」「定規」についてはstrlen()関数の結果は実際の文字数より多い数字になっていますが、mb_strlen()関数では正しく文字列の長さがカウントされています。
 余談ですが、strlen()関数は日本語の文字についてはバイト列の大きさを戻すという性質があるので、「ケシゴム」では3バイト×5文字の計算結果である15が、「定規」では3バイト×2文字の計算結果であるが戻り値として出力されています。

ポイント

・strlen()関数は文字列の長さを調べることができるが、日本語は文字数ではなくバイト列の数が出力される。
・mb_strlen()関数を使うと日本語の文字数を数えることができる。

 対象の変数やパラメータに設定される値がどのような文字列になるのかを確認した上で、strlen()関数とmb_strlen()関数を使い分けられるようにしましょう。


NEXT>> 8.3 文字列を変換する

f