💡 この記事でわかること
- 文字数の数え方(
strlenとmb_strlenの違い) - 空白を取り除く
trim、置き換えるstr_replace - 一部を取り出す
substr、含まれるか調べるstr_contains - 分割
explodeと連結implode、数値の整形number_format - 日本語(マルチバイト)を扱うときの
mb_系関数の注意点
1. 文字列操作とは?
文字列操作とは、
👉 文字列の長さを調べたり、一部を取り出したり、置き換えたりすることです。
💡 PHPには文字列用の関数が数百種類ありますが、実際によく使うのは十数個ほどです。この記事では、初心者がまず覚えておきたいものを厳選して紹介します。連結(.)やダブルクォートでの変数展開など、文字列の基本はデータ型の記事も参考にしてください。
👉 PHPのデータ型(文字列・数値・型変換)についての記事はこちら
2. 長さ・大文字小文字
<?php
echo strlen("Hello"); // 5
echo mb_strlen("こんにちは"); // 5
echo strtoupper("hello"); // HELLO
echo strtolower("WORLD"); // world👉 日本語の文字数を数えるときは strlen() ではなく mb_strlen() を使います。strlen("こんにちは") はバイト数の 15 を返してしまいます(UTF-8では日本語1文字が3バイトのため)。
3. 空白の除去・文字の置き換え
<?php
echo trim(" hello "); // "hello"(前後の空白を除去)
echo str_replace("犬", "猫", "犬と犬が鳴く"); // "猫と猫が鳴く"trim($s):前後の空白・改行を除去(ltrimは左だけ、rtrimは右だけ)str_replace(検索, 置換, 対象):一致する部分をすべて置き換える
💡 フォームの入力値は、まず trim() で前後の空白を取り除いてから扱うのが定番です。
4. 一部を取り出す・含まれるか調べる
<?php
echo substr("abcdef", 1, 3); // "bcd"(1文字目から3文字)
echo mb_substr("あいうえお", 0, 3); // "あいう"(日本語は mb_substr)
var_dump(str_contains("user@example.com", "@")); // bool(true)
var_dump(str_starts_with("photo.png", "photo")); // bool(true)
var_dump(str_ends_with("photo.png", ".png")); // bool(true)👉 「含まれるか」を調べるなら str_contains()(PHP 8.0以降)が分かりやすくおすすめです。古いコードでよく見る strpos() は「見つかった位置」を返すため、先頭で見つかると 0 が返り、if (strpos(...)) だと false と区別できないという注意点があります。
5. 分割(explode)・連結(implode)
<?php
// 文字列 → 配列
$parts = explode(",", "りんご,みかん,ぶどう");
print_r($parts); // Array ( [0] => りんご [1] => みかん [2] => ぶどう )
// 配列 → 文字列
$csv = implode(" / ", $parts);
echo $csv; // りんご / みかん / ぶどう👉 explode(区切り文字, 文字列) で分割、implode(つなぎ文字, 配列) で連結します。CSVのような区切りデータを扱うときの基本です。
6. 数値の整形・改行の変換
<?php
echo number_format(1234567); // 1,234,567(3桁区切り)
echo number_format(1234.5, 2); // 1,234.50(小数2桁)
echo sprintf("在庫%03d個", 7); // 在庫007個(0埋め)
echo nl2br("1行目\n2行目"); // 改行が <br> タグに変換されるnumber_format($n):金額などを3桁区切りにするsprintf(書式, 値):桁数や小数点をそろえた文字列を作るnl2br($s):改行を<br>に変換。テキストエリアの入力をそのまま表示したいときに使う
💡 フォームの入力値を nl2br() で表示するときは、先に htmlspecialchars() を通してから nl2br() を掛けます(順番を逆にすると <br> まで無効化されてしまいます)。
👉 PHPのフォーム処理・htmlspecialcharsについての記事はこちら
7. 日本語(マルチバイト)を扱うときの注意
👉 PHPの多くの文字列関数は「1文字 = 1バイト」を前提にしています。UTF-8では日本語1文字が3バイトなので、そのまま使うと文字数がずれたり、文字が途中で切れて文字化けしたりします。
| バイト単位(英数字向け) | 文字単位(日本語も安全) |
|---|---|
| strlen() | mb_strlen() |
| substr() | mb_substr() |
| strtoupper() / strtolower() | mb_strtoupper() / mb_strtolower() |
| strpos() | mb_strpos() |
💡 日本語が混ざる可能性があるなら、はじめから mb_ が付いた関数を選んでおくと安心です。trim()・str_replace()・explode()・str_contains() は日本語でもそのまま使えます。
8. よく使う文字列関数 早見表
| 関数 | できること |
|---|---|
| mb_strlen($s) | 文字数を数える |
| trim($s) | 前後の空白・改行を除去する |
| str_replace($a, $b, $s) | 文字を置き換える |
| mb_substr($s, $start, $len) | 一部を取り出す |
| str_contains($s, $needle) | 含まれるか(true / false) |
| explode($sep, $s) / implode($glue, $arr) | 分割 / 連結 |
| number_format($n) | 3桁区切りにする |
| nl2br($s) | 改行を <br> に変換する |
| htmlspecialchars($s, ENT_QUOTES, "UTF-8") | HTMLとして安全な文字に変換する |
9. まとめ
- 文字数は
mb_strlen()、一部を取り出すのはmb_substr()(日本語ならmb_付き) - 空白除去は
trim()、置き換えはstr_replace() - 含まれるか調べるのは
str_contains()(strpos()の0/falseの罠に注意) - 分割・連結は
explode()/implode()、金額はnumber_format() - 入力値を表示するときは
htmlspecialchars()、そのあと必要ならnl2br()
👉 関数名を全部覚える必要はありません。「やりたいこと(数える・取り出す・置き換える)」から早見表で引けるようにしておき、細かい使い方は公式マニュアルで確認する、という進め方で十分です。