PHP Tips | 文字列処理:変換系 – 半角 → 全角変換

PHP PHP
スポンサーリンク

「半角 → 全角変換」でやりたいこと

ここで目指したいのはこういう状態です。

入力された「半角の英数字・記号・カナ」などを、
システム内部では「全角」にそろえて扱いたい。

例えば、ユーザーがこう入力してきたとします。

ヤマダ タロウ
アパート 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' を使ってしまうと、

  • abc123ABC123

のように、英数字まで全角になってしまい、
「ログイン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

タイトルとURLをコピーしました