「全角 → 半角変換」でやりたいこと
まずゴールをはっきりさせます。
ユーザーが入力した「全角の英数字・記号・スペース」などを、
システム内部では「半角」にそろえたい。
例えば、こういう入力が来ることがあります。
ID: 12345
これをシステム側では、
ID: 12345
のように、半角に統一して扱いたい——これが「全角 → 半角変換」です。
フォーム入力、検索条件、ログインID、郵便番号、電話番号など、
「半角で扱いたいけど、ユーザーは全角で打ってくる」場面は山ほどあります。
PHP で全角 → 半角変換する基本:mb_convert_kana
mb_convert_kana の役割
PHP には、マルチバイト文字の「かな変換・全角半角変換」をしてくれるmb_convert_kana() という関数があります。
string mb_convert_kana(
string $string,
string $option = "",
?string $encoding = null
)
PHPここで一番大事なのは、第2引数の「オプション」です。
このオプションで、「何を全角→半角にするか」「何を半角→全角にするか」を細かく指定できます。
全角 → 半角の主なオプション
よく使うものだけ覚えれば十分です。
'a':全角英数字 → 半角英数字'A':半角英数字 → 全角英数字'n':全角数字 → 半角数字's':全角スペース → 半角スペース'k':全角カタカナ → 半角カタカナ'K':半角カタカナ → 全角カタカナ
複数指定するときは、文字をつなげて書きます。
'as' // 全角英数字+全角スペース → 半角
'kn' // 全角カタカナ+全角数字 → 半角
PHP一番よく使うパターン:英数字とスペースを半角に
例:ID や郵便番号、電話番号など
ユーザーがこう入力してきたとします。
$input = " ID: 12345 ";
PHPこれを「英数字とスペースだけ半角にしたい」なら、こう書きます。
$normalized = mb_convert_kana($input, 'as', 'UTF-8');
echo $normalized;
// " ID: 12345 "
PHPここでのポイントは、
'a':全角英数字 → 半角英数字's':全角スペース → 半角スペース'UTF-8':エンコーディングを明示
です。
そのあとで trim() すれば、前後のスペースもきれいに取れます。
$normalized = trim(mb_convert_kana($input, 'as', 'UTF-8'));
echo $normalized;
// "ID: 12345"
PHP実務ユーティリティとして関数にまとめる
「英数字+スペースを半角に統一」ユーティリティ
フォーム入力の前処理として、ほぼそのまま使える関数を作ってみます。
/**
* 全角英数字・全角スペースを半角に統一(UTF-8 前提)
*
* @param string $text
* @return string
*/
function normalizeAlnumAndSpace(string $text): string
{
// 全角英数字+全角スペース → 半角
$text = mb_convert_kana($text, 'as', 'UTF-8');
// 前後のスペースを削除
return trim($text);
}
PHP使い方はこうです。
$rawId = $_POST['login_id'] ?? '';
$loginId = normalizeAlnumAndSpace($rawId);
// ここから先は、$loginId を「半角英数字前提」として扱える
PHPこれを一つプロジェクト共通のユーティリティとして置いておくだけで、
- ログインID
- 会員番号
- 郵便番号
- 電話番号
などの入力処理が、かなり安定します。
カタカナも含めて半角にしたい場合
全角カタカナ → 半角カタカナ
例えば、フリガナ入力欄で「半角カタカナに統一したい」場合。
$kana = " カタカナ ";
$normalized = mb_convert_kana($kana, 'ks', 'UTF-8');
echo $normalized;
// " カタカナ "
PHPここでのオプションは、
'k':全角カタカナ → 半角カタカナ's':全角スペース → 半角スペース
です。
ただし、実務では「半角カタカナは避けたい(文字化けしやすい)」という方針も多いので、
フリガナは「全角カタカナに統一('K')」することの方が多いです。
どこまで変換するかは「仕様」で決める
変換しすぎると困るケースもある
mb_convert_kana はとても強力なので、
オプションを増やせば増やすほど「いろいろ勝手に変換」してくれます。
例えば 'as' に 'n' を足して 'ans' にすると、
- 全角英字 → 半角英字
- 全角数字 → 半角数字
- 全角スペース → 半角スペース
になりますが、
「数字だけは全角のままにしておきたい」ような仕様だと困ります。
なので、実務では必ずこう考えます。
この入力項目では、
「何を全角→半角にしたいのか」を、項目ごとに決める。
そして、そのルールをユーティリティ関数に閉じ込めてしまうのがきれいです。
項目ごとのユーティリティ例
ログインID用:英数字+記号+スペースを半角に
function normalizeLoginId(string $text): string
{
// 全角英数字・記号・スペース → 半角
// 'a':英数字、's':スペース、'p':記号
$text = mb_convert_kana($text, 'asp', 'UTF-8');
return trim($text);
}
PHP郵便番号用:数字とハイフンだけを半角に
function normalizePostalCode(string $text): string
{
// 全角数字・全角ハイフン → 半角
// 'n':数字、's':スペース、'a' に含まれる記号も対象にしたい場合は調整
$text = mb_convert_kana($text, 'ns', 'UTF-8');
// 数字とハイフン以外は削る(任意)
$text = preg_replace('/[^0-9\-]/', '', $text);
return $text;
}
PHPこうやって「用途ごとに変換ルールを固定」しておくと、
後から仕様を見直すときにも分かりやすくなります。
まとめ:今日からの「全角 → 半角変換」の基準
押さえておきたいポイントを整理します。
- 全角 → 半角変換は、
mb_convert_kana一択でよい。 - 何を変換するかは、第2引数のオプションで細かく指定する(
'a','n','s','k'など)。 - 「英数字+スペースを半角に」は
'as'が定番。 - 項目ごとに「どこまで変換するか」を決めて、ユーティリティ関数に閉じ込めると実務で強い。
まずは、これくらいの関数を一つプロジェクトに置いておくと、かなり世界が楽になります。
function normalizeAlnumAndSpace(string $text): string
{
$text = mb_convert_kana($text, 'as', 'UTF-8');
return trim($text);
}
PHP
