1. 本記事のポイント
- PHPにおける基本的な文字列操作関数(substr, str_replace など)を解説
- 関数の使い分けや挙動差、注意点を実行可能コード付きで紹介
- 実務でよく使われるパターンや設計判断も交えて解説
2. PHPの文字列操作関数とは?
PHPは文字列操作に特化した関数群が豊富に用意されており、サーバーサイドのWebアプリ開発において非常によく使われます。特にテンプレート処理やバリデーション、形式変換など、日常的な文字列処理で必須の機能です。
関数は標準で組み込まれており、追加ライブラリなしで使用可能です。substr
やstr_replace
といった基本的なものから、正規表現を利用するpreg_replace
、バイト数に依存せずマルチバイトに対応したmb_substr
なども用意されています。
本記事では、これらの中から実務で頻繁に登場する代表的な関数を取り上げ、基本的な使い方から誤用しやすいポイントまで整理して解説します。
3. 詳細解説
部分文字列を取得:substr()
特定の位置から文字列の一部を取得する場合に使用します。
// 文字列の3文字目から4文字取得する
$text = "abcdefg";
$sub = substr($text, 2, 4); // 開始位置2(0始まり)、長さ4
echo $sub; // 出力: "cdef"
引数 $start
は0始まり、負数を指定すると後ろから数えます。長さ $length
を省略すると末尾まで抽出します。
// 末尾から3文字取得
$text = "abcdefg";
echo substr($text, -3); // 出力: "efg"
マルチバイト文字列(日本語など)を扱う場合は mb_substr()
を使う必要があります。
文字列を置換:str_replace()
文字列中の特定部分を置換します。配列で複数指定も可能です。
$text = "I like apples.";
$newText = str_replace("apples", "oranges", $text);
echo $newText; // 出力: "I like oranges."
複数ワードを一括置換したい場合:
$text = "red green blue";
$newText = str_replace([
"red", "green"
], ["orange", "yellow"], $text);
echo $newText; // 出力: "orange yellow blue"
検索語と置換語の配列サイズが異なると、余った要素は無視されます。
正規表現で置換:preg_replace()
正規表現にマッチした部分を置換する関数です。
$text = "Phone: 090-1234-5678";
$masked = preg_replace("/\d{2,4}-\d{2,4}-\d{4}/", "***-****-****", $text);
echo $masked; // 出力: "Phone: ***-****-****"
str_replace()
では柔軟に対応できないパターンマッチに有効です。
マルチバイト対応:mb_substr()
日本語などのマルチバイト文字列の部分取得には mb_substr()
を使います。
$text = "こんにちは世界";
$sub = mb_substr($text, 2, 3); // 「にちは」
echo $sub; // 出力: "にちは"
substr()
を日本語に使うと文字化けや一部欠落の可能性があります。
4. よくあるミス・誤解・落とし穴
substr()
でマルチバイト文字を扱うと、途中で文字が切れて文字化けすることがあります。日本語にはmb_substr()
を使いましょう。str_replace()
の検索・置換配列の長さが一致しない場合、想定通りに処理されないことがあります。preg_replace()
使用時は、正規表現のエスケープやパターン誤りに注意が必要です。- PHPのバージョンによっては、
mbstring
拡張が無効になっている場合があるため、事前確認が必要です。
5. まとめ
PHPの文字列操作関数は非常に強力であり、適切に使い分けることで柔軟な文字列処理が可能になります。
- 単純な部分抽出は
substr()
、マルチバイト文字列にはmb_substr()
- 固定置換には
str_replace()
、柔軟なマッチングにはpreg_replace()
日本語などのマルチバイト文字を扱う場面が多い場合は、常に mb_
系の関数を優先的に使用するのが実務上のベストプラクティスです。