PHP - BASIC - 9. PHPの文字列を扱う関数 - 7. マルチバイト関数

PHPプログラムにおいて、日本語のようなマルチバイト文字列を扱う場合は、マルチバイト用の文字列関数を使う必要があります。具体的には マルチバイト文字列の長さを取得する mb_strlen 関数や、マルチバイト文字列の部分文字列を取得する mb_substr 関数といったものが用意されています。

これらのマルチバイト用の関数はPHPの mbstring モジュールとして定義されています。PHPの実行環境によっては mbstring モジュールがデフォルトで無効となっているケースもあります。そのような場合は php.ini ファイルを編集して mbstring モジュールを有効にする必要があります。

Macに標準でインストールされているPHPの実行環境(7.3系)においては mbstring モジュールがデフォルトで有効になっています。Windowsの場合はインストール方法にもよりますが php.ini ファイルの編集が必要になります。

それではマルチバイト文字列用の mb_strlen 関数を使うプログラム( string7.php )を作成してみましょう。

<?php
$message = "ハローワールド";
$length = mb_strlen($message);
echo $length . PHP_EOL;

mb_strlen 関数は strlen 関数と同様に、引数に対象となる文字列を受け取り、戻り値に文字列長を返します。またここでは戻り値を受け取るために $length 変数を用意しています。

作成したプログラムを実行してみましょう。ターミナルから次のように実行します。

$ php string6.php
7

実行結果から ハローワールド の文字列長である7が出力されているのがわかります。

参考: php.iniファイルの編集 (Windowsの場合)

ここで取り上げた mb_strlen 関数を使うプログラム( string7.php )が正しく動作しない場合は mbstring モジュールが無効となっている可能性があります。 php.ini ファイルを開いて mbstring モジュールの設定を確認してみましょう。

php.ini ファイルを開いてテキストエディタの検索機能(VS Codeの場合は ctrl + f キー)を使って「mbstring」を検索します。そうすると extension という項目の中に次のような設定項目が存在します。

; extension=mbstring

extension とは拡張を意味する言葉です。PHPは mbstring モジュールなど、様々なモジュールを追加できるようになっています。

php.ini ファイルでは先頭の ; はコメント行を表しています。そのため上記の設定項目はコメントアウトされており、無効となっていることがわかります。 mbstring モジュールを有効にするには以下のように先頭の ; を外すようにします。

extension=mbstring

以上で mbstring モジュールは有効となり、マルチバイト文字列用の関数が利用できるようになります。

またマルチバイト文字列処理の詳細な設定も済ませておくと良いでしょう。 php.ini ファイルの中で「mbstring」を検索して以下の項目を設定します。以下はPHPの内部エンコーディングに UTF-8 を設定するものです。

[mbstring]
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
mbstring.detect_order = auto

デフォルトでは上記の設定項目は ; コメントアウトされているので、先頭の ; を外して値の部分を記述していくようにします。設定項目を確認するには php - i コマンドを使います。結果の中に内容が確認できます。

(...省略)
mbstring.detect_order => auto => auto
mbstring.encoding_translation => Off => Off
mbstring.http_input => pass => pass
mbstring.http_output => pass => pass
mbstring.internal_encoding => UTF-8 => UTF-8
mbstring.language => Japanese => Japanese
(...省略)

php -i コマンドを実行すると、多くの設定項目が表示されるので grep コマンドで結果を絞り込んだり、結果をファイルにコピーしてから確認したりすると良いでしょう。あるいは phpinfo 関数を使って設定項目を確認することもできます。