💡 今日の3行まとめ
- 全角・半角の表記揺れを直すときに
str_replace()で1文字ずつ置換してはいけない mb_convert_kana($text, 'asKV')を使えば「英数字・空白の半角化」と「半角カナの全角化」が1行で完了する- 標準の
trim()は全角スペースを消せないため、先に半角スペースへ変換してからtrim()するのが鉄則
1. 今日のお題とゴール
会員登録や検索フォームでユーザーが入力した「全角英数字」「半角カタカナ(濁点分離)」「前後の全角スペース」が混ざった文字列を、データベースに保存しやすい統一フォーマットへ一括整形するプログラムを作ります。
- 全角の英字・数字(
PHPや2026)を半角(PHP/2026)に変換する - 半角カタカナ(
ガイド)を濁点付きの全角カタカナ(ガイド)に統合する - 前後に付いた全角スペース(
)や半角スペースをすべて取り除く
// 期待する出力例
変換前: [ PHP入門 ガイド 2026 ]
変換後: [PHP入門 ガイド 2026]
郵便番号: 1000001
2. ❌ やりがちなNGコード vs ⭕ コピペで動く正解コード
❌ やりがちなNGコードBefore
<?php
$rawInput = ' PHP入門 ガイド 2026 ';
// 全角数字だけ愚直に列挙して置換し、そのまま trim() してしまう
$clean = str_replace(
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'],
$rawInput
);
$clean = trim($clean); // 全角スペースや全角英字・半角カナがそのまま残る!
str_replace() では英字や半角カナに対応しきれません。さらに標準の trim() は全角スペース( )を削除できないため、前後に空白が残ってしまいます。
⭕ コピペで動く正解コード(PHP 8.3+)After
<?php
declare(strict_types=1);
$rawInput = ' PHP入門 ガイド 2026 ';
// 1. mb_convert_kana() で表記揺れを一括変換する
// a: 全角英数字・記号 → 半角 / s: 全角スペース → 半角スペース
// K: 半角カタカナ → 全角カタカナ / V: 濁点付きの半角カナ(ガ等)を1文字(ガ)に統合
$converted = mb_convert_kana($rawInput, 'asKV', 'UTF-8');
// 2. 全角スペースが半角スペースに変わったので、標準の trim() で前後を除去できる
$cleanText = trim($converted);
echo "変換前: [{$rawInput}]" . PHP_EOL;
echo "変換後: [{$cleanText}]" . PHP_EOL;
// 応用: 全角数字やハイフン混じりの郵便番号を「半角数字7桁」に揃える
$rawZip = ' 100ー0001 ';
$halfZip = mb_convert_kana($rawZip, 'n', 'UTF-8'); // n: 全角数字 → 半角数字
$digitsOnly = preg_replace('/\D/', '', $halfZip); // 数字以外(空白・ハイフン等)を除去
echo "郵便番号: {$digitsOnly}" . PHP_EOL; // 1000001
3. ここだけ押さえる!3つのポイント
1黄金オプション「asKV」で入力揺れを一網打尽にする
第2引数には複数の変換モードを組み合わせて指定でき、実務では 'asKV' が定番です。V を忘れると「ガ」が「カ゛(2文字)」に分裂するため、必ず KV をセットで指定しましょう。
2「mb_convert_kana の s」→「trim()」の順番を守る
PHPの trim() は半角スペースや改行しか消せず、全角スペース( )はそのまま残ります。先にオプション s で半角スペースへ変換してから trim() を呼ぶのが鉄則です。
3郵便番号や電話番号は「n」変換+数字以外の除去が最強
長音「ー」やマイナス「−」などハイフン類は種類が多く、個別の置換は漏れのもとです。オプション 'n' で数字を半角にしたあと、preg_replace('/\D/', '', $str) で数字以外を除去すれば確実に数字だけを抽出できます。
4. 1分ミニチャレンジ
🚀 手を動かしてみよう
正解コードのオプション 'asKV' を、カタカナをすべて全角ひらがなに変える 'asHcV' に書き換えて実行してみましょう。「ふりがな入力欄」でカタカナが入力されても、自動でひらがなに統一できる便利さを体験できます。