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

PHP PHP
スポンサーリンク

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

まずゴールをはっきりさせます。

ユーザーが入力した「全角の英数字・記号・スペース」などを、
システム内部では「半角」にそろえたい。

例えば、こういう入力が来ることがあります。

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

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