mb_strwidth

関数の概要

mb_strwidth関数は、PHPのマルチバイト文字列関数の一つで、文字列の「表示幅」を取得するために使われます。日本語や中国語などのマルチバイト文字は1文字でも表示幅が2の場合があり、単純な文字数カウントでは表示スペースを正確に把握できません。mb_strwidthはこうした表示幅を正確に計測することで、文字列のレイアウトや表示制御に役立ちます。

パラメータの説明

  • string $str
    表示幅を取得したい対象の文字列を指定します。
  • string|null $encoding(省略可)
    文字コードを指定します。省略すると内部文字エンコーディングが使われます。

戻り値

渡した文字列の表示幅(半角文字は1、全角文字は2として計算された合計の幅)を整数で返します。エラーの場合はfalseが返されます。

使用例

基本的な使い方

<?php
$str = 'こんにちは';
$width = mb_strwidth($str, 'UTF-8');
echo "「{$str}」の表示幅は {$width} です。";
?>

この例では「こんにちは」の表示幅を取得しています。日本語は全角文字なので、1文字あたり幅が2として計算されます。

半角・全角混在の例

<?php
$str = 'abcあいう';
$width = mb_strwidth($str, 'UTF-8');
echo "「{$str}」の表示幅は {$width} です。";
?>

英字の「abc」は半角で幅1ずつ、ひらがなの「あいう」は全角で幅2ずつなので、合計表示幅は7となります。

エンコーディング指定を省略した例

<?php
mb_internal_encoding('UTF-8');
$str = 'テスト';
echo mb_strwidth($str);
?>

mb_internal_encoding()で内部エンコーディングを設定しておくと、mb_strwidthの第2引数を省略しても正しく計測できます。

関連する関数

  • mb_strlen — マルチバイト文字列の文字数を取得
  • mb_strimwidth — 表示幅で文字列を切り詰める
  • mb_substr — マルチバイト対応の文字列切り取り
  • mb_convert_encoding — 文字コード変換

まとめ

mb_strwidthはマルチバイト文字列の「表示幅」を正しく取得できる便利な関数です。特に日本語のような全角文字が混じる文字列の表示幅制御に役立ち、テキストの整形やレイアウト調整に欠かせません。エンコーディング設定を適切に行い、mb_strlenなどの他のマルチバイト文字列関数と組み合わせて効率よく文字列操作を行いましょう。