カテゴリ: PHP 更新日: 2026/01/13

PHPのマルチバイト文字列を正しく扱う方法!初心者向けにmb_strlenとmb_substrをやさしく解説

PHP のマルチバイト文字列の処理(mb_strlen, mb_substr)
PHP のマルチバイト文字列の処理(mb_strlen, mb_substr)

先生と生徒の会話形式で理解しよう

生徒

「PHPで文字数を数えたら、ひらがなや漢字の数が合ってない気がします……」

先生

「それは『マルチバイト文字』が関係しているかもしれませんね。日本語などの文字は1文字でも複数バイトを使う場合があるんですよ。」

生徒

「バイトって何ですか?難しそうです……」

先生

「心配しなくて大丈夫です!初心者でも分かるように、PHPのmb_strlenmb_substrを使って、正確に文字数を数えたり、部分的に取り出したりする方法をゆっくり解説しますね。」

-

1. マルチバイト文字列とは?

1. マルチバイト文字列とは?
1. マルチバイト文字列とは?

マルチバイト文字(multi-byte characters)とは、1文字を表すのに複数のバイトを使う文字のことです。バイトとは、パソコンがデータを管理する単位のことで、英語の「A」などは1バイトで済みますが、日本語の「あ」や「漢」などは2バイト以上必要

PHPでは、この違いを意識しないと、文字数を数えたり切り出したりするときにバグの原因になります。

2. strlen関数とmb_strlen関数の違い

2. strlen関数とmb_strlen関数の違い
2. strlen関数とmb_strlen関数の違い

PHPには文字列の長さを調べるstrlenという関数がありますが、これはバイト数を数える関数です。つまり、日本語では正確な文字数にならないことがあります。


$text = "こんにちは";
echo strlen($text);

15

「こんにちは」は5文字なのに「15」と出るのは、1文字が3バイトで計算されているからです。

そこで登場するのが、マルチバイト文字に対応したmb_strlenです!


$text = "こんにちは";
echo mb_strlen($text);

5

このように、mb_strlenなら日本語でも正確な「文字数」がわかります。

3. mb_strlenの使い方まとめ

3. mb_strlenの使い方まとめ
3. mb_strlenの使い方まとめ

mb_strlenは、次のような使い方をします:


mb_strlen(文字列, 文字コード);

第二引数の「文字コード」は"UTF-8"と書くのが一般的です。


$text = "プログラミング";
$length = mb_strlen($text, "UTF-8");
echo $length;

7

このように、日本語の文字列でも正しく文字数をカウントできます。

4. mb_substrで文字列を切り取る

4. mb_substrで文字列を切り取る
4. mb_substrで文字列を切り取る

今度は、文字列の一部だけを取り出したいときに使うmb_substrを紹介します。

たとえば、「プログラミング」から「グラミン」だけを取り出したい場合、mb_substrを使います。


$text = "プログラミング";
$part = mb_substr($text, 3, 4, "UTF-8");
echo $part;

グラミン

mb_substrは次のように使います:

  • 第一引数:対象の文字列
  • 第二引数:何文字目から始めるか(0から数える)
  • 第三引数:何文字切り出すか
  • 第四引数:文字コード(省略可だがUTF-8指定が安心)
-

5. 普通のsubstrとの違いに注意!

5. 普通のsubstrとの違いに注意!
5. 普通のsubstrとの違いに注意!

substrという似た関数もありますが、これもstrlenと同じくバイト単位で処理されるため、日本語では文字が切れてしまうことがあります。


$text = "こんにちは";
echo substr($text, 0, 3);

こん

このように、意味不明な文字列になってしまうのです。日本語などマルチバイト文字列を使う場合は、必ずmb_から始まる関数を使いましょう。

6. よくある使い方:文字数制限や表示カット

6. よくある使い方:文字数制限や表示カット
6. よくある使い方:文字数制限や表示カット

ブログやコメント欄で「50文字以内に切りたい」「長すぎる文章を途中で省略したい」という場面はよくあります。そんなときにもmb_strlenmb_substrが便利です。


$text = "この文章はとても長いので途中で切りたいと思います。";
if (mb_strlen($text, "UTF-8") > 20) {
    $short = mb_substr($text, 0, 20, "UTF-8") . "…";
    echo $short;
} else {
    echo $text;
}

この文章はとても長いので途中…

このように、表示用に文字数をコントロールしたいときに大活躍します。

7. mb系関数を使うときの注意点

7. mb系関数を使うときの注意点
7. mb系関数を使うときの注意点

mb_strlenmb_substrなどの「mb系関数」を使うには、PHPのマルチバイト文字列モジュール(mbstring)が有効になっている必要があります。

通常のPHP環境では有効になっていることが多いですが、mb_で始まる関数が使えない場合は、サーバーの設定やPHPの拡張モジュールを確認してみましょう。

まとめ

まとめ
まとめ

PHPで日本語を扱う際には、マルチバイト文字列の特性を理解し、mb_strlenmb_substrといったmb系関数を使うことがとても重要です。特に、ひらがな・カタカナ・漢字のように、1文字が2バイト以上になる文字では、通常のstrlensubstrを使うと意図しない結果になってしまいます。

今回学んだmb_strlenは、文字列の正確な文字数を数えるのに最適な関数です。これはブログの文字数制限や、入力チェック、文字数カウント機能などでも活用できます。また、mb_substrは、日本語の文字列を途中から切り出すときに重宝します。表示のカットやサマリ表示など、ユーザーインターフェースを整えるうえでも欠かせません。

mb系関数は、UTF-8文字コードを正しく理解しながら使うことで、バグの少ないプログラムを実現できます。特に、日本語を正確に扱うことが求められる場面では、mbstringの拡張モジュールが必須となるため、開発環境の設定確認も大切です。

■mb_strlenとmb_substrを使った文字数チェックのサンプル


<?php
$text = "プログラミングの勉強は楽しいですね!";

// 文字数を取得
$length = mb_strlen($text, "UTF-8");
echo "文字数:" . $length . "<br>";

// 15文字を超える場合は、前半だけを表示して省略記号を追加
if ($length > 15) {
    $short = mb_substr($text, 0, 15, "UTF-8") . "…";
    echo "表示用:" . $short;
} else {
    echo "表示用:" . $text;
}
?>

上記のように、mb_strlenmb_substrを組み合わせることで、文字数に応じた表示処理が行えます。
日本語を含む文字列を安全かつ正確に扱うことは、ユーザー体験の向上にもつながります。
文字化けや文字切れのトラブルを防ぐためにも、マルチバイトに強いPHPのmb関数群をぜひマスターしておきましょう。

先生と生徒の振り返り会話

生徒

「今日の記事で、なんで普通のstrlenやsubstrでは日本語がうまく処理できないのか、すごくよく分かりました!」

先生

「そうですね。日本語は1文字が複数バイトで構成されているので、バイト単位の処理だと文字の途中で切れてしまうんです。」

生徒

「mb_strlenなら正確に文字数が数えられて、mb_substrならちゃんと日本語の一部だけを取り出せるってことですね!」

先生

「その通り!表示を短くしたり、入力文字数を制限したりする機能でも安心して使えますよ。」

生徒

「あと、UTF-8とかマルチバイトって言葉もなんとなく意味がつかめました!難しそうだったけど、身近な問題なんですね。」

先生

「ええ、特に日本語を扱うWebアプリでは避けて通れないテーマです。これをきっかけにmbstring関連の関数も覚えていきましょう!」

生徒

「ありがとうございます!次は自分でも文字制限の機能を作ってみます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

PHPでマルチバイト文字列とは何ですか?

マルチバイト文字列とは、ひらがなや漢字などの日本語のように、1文字が複数のバイトで構成されている文字列のことです。英語のような1バイト文字とは違い、正確な扱いには注意が必要です。
コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
New1
PHP
PHPのCookieセキュリティを完全ガイド!初心者でもわかるSecureとHttpOnlyの使い方
New2
PHP
PHPのCSRF対策を完全理解!トークンを使った安全なフォーム送信の仕組みを初心者向けに徹底解説
New3
PHP
PHPのSQLインジェクション対策を完全解説!初心者でも安全にデータベースを扱う方法
New4
PHP
PHPでカウントダウンタイマーを作る方法!初心者向けにやさしく解説
-
人気記事
No.1
Java&Spring記事人気No1
Python
Pythonでテキストファイルを1行ずつ読み込む方法(readline() / readlines())
No.2
Java&Spring記事人気No2
PHP
初心者向けPHPでMySQLからデータを取得する方法(SELECT文)完全ガイド
No.3
Java&Spring記事人気No3
Python
Pythonのリストの重複を削除する方法を解説!初心者向けにsetとdict.fromkeysの使い方をやさしく説明
No.4
Java&Spring記事人気No4
Python
Pythonで経過時間を測る方法をやさしく解説!初心者向けtime.perf_counterとtime.sleepの使い方
No.5
Java&Spring記事人気No5
PHP
PHPのXSS対策を完全ガイド!初心者でもわかる安全なWebアプリの作り方
No.6
Java&Spring記事人気No6
PHP
PHPのOAuth認証をやさしく解説!Google・Facebookログインを初心者向けに実装しよう
No.7
Java&Spring記事人気No7
Python
Pythonでエラースタックトレースを表示・取得する方法を徹底解説!初心者向け例外処理入門
No.8
Java&Spring記事人気No8
Python
PythonでExcelファイル(.xlsx)を操作する方法を徹底解説!初心者でもできるopenpyxl・pandasの使い方
-
-