「半角 → 全角変換」でやりたいこと
ここで目指したいのはこういう状態です。
入力された「半角の英数字・記号・カナ」などを、
システム内部では「全角」にそろえて扱いたい。
例えば、ユーザーがこう入力してきたとします。
ヤマダ タロウ
アパート 101
ABC123
これをアプリ側では、次のように統一したい場面があります。
ヤマダ タロウ
アパート 101
ABC123
帳票出力、PDF、印刷物、基幹システム連携など、「全角でそろえたい世界」はまだまだ現役です。
そのときに使うのが「半角 → 全角変換」です。
PHP で半角 → 全角変換する基本:mb_convert_kana
mb_convert_kana の役割とざっくりイメージ
全角 → 半角のときと同じく、ここでも主役は mb_convert_kana() です。
string mb_convert_kana(
string $string,
string $option = "",
?string $encoding = null
)
PHP第2引数の「オプション」で、「何を半角→全角にするか」を指定します。
ここをきちんと理解しておくと、「やりたい変換だけ」をピンポイントで書けるようになります。
半角 → 全角でよく使うオプション
主なオプション一覧(半角 → 全角側)
よく使うのはこのあたりです。
'A':半角英数字 → 全角英数字'N':半角数字 → 全角数字'S':半角スペース → 全角スペース'K':半角カタカナ → 全角カタカナ'V':濁点・半濁点を結合(「ガ」→「ガ」など、Kと組み合わせて使う)
複数指定するときは、文字をつなげて書きます。
'AS' // 半角英数字+半角スペース → 全角
'KV' // 半角カタカナ+濁点を全角カタカナに
'ANS' // 半角英数字+スペース → 全角
PHP一番よくあるパターン:カタカナを全角に統一
フリガナ入力欄の「半角カナ禁止」をコードで実現する
ユーザーがこう入力してきたとします。
$kana = "ヤマダ タロウ";
PHPこれを「全角カタカナに統一」したいなら、こう書きます。
$normalized = mb_convert_kana($kana, 'KV', 'UTF-8');
echo $normalized;
// ヤマダ タロウ
PHPここでのポイントは、
'K':半角カタカナ → 全角カタカナ'V':濁点・半濁点を結合(「バ」→「バ」などを1文字に)'UTF-8':エンコーディングを明示
です。
フリガナ入力欄では、
- 半角カナで入れてくる人がいる
- でもシステムとしては「全角カタカナで統一」したい
ということが非常によくあるので、この 'KV' はほぼ定番です。
英数字を全角にしたい場合
帳票や基幹システム向けの「全角英数字」
例えば、こういう入力が来たとします。
$code = "ABC123";
PHPこれを「全角英数字」にしたいなら、こうです。
$normalized = mb_convert_kana($code, 'A', 'UTF-8');
echo $normalized;
// ABC123
PHPここでのポイントは、
'A':半角英数字 → 全角英数字
だけです。
数字だけ全角にしたいなら 'N'、スペースも全角にしたいなら 'S' を足します。
$normalized = mb_convert_kana($code, 'ANS', 'UTF-8');
PHP実務ユーティリティとして関数にまとめる
フリガナ用:半角カナを全角カタカナに統一
/**
* フリガナ用:半角カナを全角カタカナに統一(UTF-8 前提)
*
* @param string $text
* @return string
*/
function normalizeFurigana(string $text): string
{
// 半角カタカナ+濁点を全角カタカナに
$text = mb_convert_kana($text, 'KV', 'UTF-8');
// 前後のスペースを削除(全角スペースも含めて)
$text = trim(mb_convert_kana($text, 's', 'UTF-8'));
return $text;
}
PHP使い方はこうです。
$rawKana = $_POST['kana'] ?? '';
$kana = normalizeFurigana($rawKana);
// ここから先は、$kana を「全角カタカナ前提」として扱える
PHPこれを一つ置いておくだけで、
「半角カナで入れてくる人問題」がかなりきれいに片付きます。
帳票用:英数字を全角にそろえる
/**
* 帳票用:半角英数字・スペースを全角に統一(UTF-8 前提)
*/
function toFullWidthAlnum(string $text): string
{
// 半角英数字+スペース → 全角
return mb_convert_kana($text, 'AS', 'UTF-8');
}
PHP帳票や PDF で「全部全角で出したい」ようなときに使えます。
どこまで変換するかは「項目ごとの仕様」で決める
変換しすぎると困るパターン
mb_convert_kana は便利ですが、オプションを盛りすぎると「やりすぎ」になります。
例えば、ログインIDで 'A' を使ってしまうと、
abc123→ABC123
のように、英数字まで全角になってしまい、
「ログインIDは半角英数字で扱いたい」という仕様とぶつかります。
なので、実務では必ずこう考えます。
この項目では、
「何を半角→全角にしたいのか」を、項目ごとに決める。
そして、そのルールをユーティリティ関数に閉じ込めてしまうのが一番きれいです。
例題でイメージを固める
例題1:フリガナ入力の正規化
$rawKana = " ヤマダ タロウ ";
$kana = normalizeFurigana($rawKana);
echo $kana;
// ヤマダ タロウ(スペースの扱いは仕様に応じて調整)
PHPここから先は、
- 「全角カタカナであること」を前提にバリデーション
- 「カタカナ以外が含まれていないか」をチェック
といった処理を書きやすくなります。
例題2:帳票のコードを全角にそろえる
$code = "A-123";
$full = toFullWidthAlnum($code);
echo $full;
// A-123
PHP印刷物や PDF で「全角でそろっていると見た目がきれい」な場面では、
こうした全角統一がまだまだ現役です。
まとめ:今日からの「半角 → 全角変換」の基準
押さえておきたいポイントをコンパクトにまとめます。
- 半角 → 全角変換は、
mb_convert_kanaのオプション指定でコントロールする。 - カタカナは
'KV'(半角カナ+濁点 → 全角カタカナ)が定番。 - 英数字を全角にしたいなら
'A'、スペースも含めるなら'AS'。 - 「どこまで変換するか」は項目ごとに仕様として決めて、ユーティリティ関数に閉じ込めると実務で強い。
まずは、フリガナ用にこれを一つ置いておくと、かなり世界が楽になります。
function normalizeFurigana(string $text): string
{
$text = mb_convert_kana($text, 'KV', 'UTF-8');
$text = trim(mb_convert_kana($text, 's', 'UTF-8'));
return $text;
}
PHP