PHP Tips | 文字列処理:変換系 – 英字をすべて小文字

PHP PHP
スポンサーリンク

「英字をすべて小文字」にする目的をはっきりさせる

まず、なぜ「全部小文字」にしたいのかを整理しておきます。

よくある目的はこんな感じです。

  • ユーザー名やログインIDを「大文字・小文字を区別せずに扱いたい」
  • メールアドレスを比較するときに、大文字・小文字の違いを無視したい
  • 検索用に、英字をすべて小文字にそろえておきたい

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

UserName
USERNAME
username

見た目は違いますが、「同じものとして扱いたい」場面は多いですよね。
そのときに使うのが「英字をすべて小文字にそろえる」変換です。


PHP の基本:strtolower で小文字化する

一番シンプルな小文字化

PHP には、英字を小文字に変換するための基本関数 strtolower() があります。

$text = "Hello WORLD";

$lower = strtolower($text);

echo $lower;
// hello world
PHP

やっていることはとてもシンプルで、

  • A〜Z を a〜z に変換する
  • 英字以外(数字・記号・日本語など)はそのまま

という動きです。

$text = "ID: ABC123 日本語";

echo strtolower($text);
// id: abc123 日本語
PHP

英字だけが小文字になり、日本語や数字は変わりません。

まずは「英字だけ」のケースなら strtolower で十分

ログインID、メールアドレス、英字だけのコードなど、
「基本的に ASCII の英字だけ」という前提なら、strtolower() だけで問題ありません。


マルチバイトやアクセント付き文字を考えるなら mb_strtolower

何が問題になるのか

ヨーロッパ系の言語などでは、こんな文字が出てきます。

Ä Ö Ü ß É Ç

strtolower() は、こういった「ASCII 以外の文字」には対応していません。
つまり、「大文字→小文字」の変換が正しく行われないことがあります。

国際化されたシステムや、多言語対応を視野に入れるなら、
「マルチバイト対応の小文字化」を考える必要が出てきます。

mb_strtolower の登場

そこで使えるのが mb_strtolower() です。

$lower = mb_strtolower(string $string, ?string $encoding = null);
PHP

使い方はこうです。

$text = "ÄÖÜ ÉÇ ABC";

$lower = mb_strtolower($text, 'UTF-8');

echo $lower;
// äöü éç abc
PHP

mb_strtolower は、指定したエンコーディング(UTF-8 など)に従って、
「その言語として正しい小文字」に変換してくれます。


実務ユーティリティとして関数にまとめる

「英字をすべて小文字」にする共通関数

プロジェクト全体で使い回せるように、ユーティリティ関数にしておきましょう。

/**
 * 英字をすべて小文字に変換(UTF-8 前提)
 *
 * @param string $text
 * @return string
 */
function toLower(string $text): string
{
    // 国際化も意識するなら mb_strtolower を優先
    return mb_strtolower($text, 'UTF-8');
}
PHP

使い方はとてもシンプルです。

$rawId = $_POST['login_id'] ?? '';

$normalizedId = toLower($rawId);

echo $normalizedId;
PHP

これで、

  • “UserName”
  • “USERNAME”
  • “username”

のどれが来ても、すべて "username" にそろえられます。


どんな場面で使うと効果的か

ログインIDやユーザー名の正規化

ログインIDを「大文字・小文字を区別しない」仕様にしたい場合、
保存・比較の前に小文字化しておくのが定番です。

$rawId = $_POST['login_id'] ?? '';

// 入力を小文字に統一
$loginId = toLower($rawId);

// DB には login_id を小文字で保存しておく
// 認証時も、小文字にしてから比較
PHP

こうしておくと、

  • 登録時:”UserName”
  • ログイン時:”username”

のような揺れがあっても、同じユーザーとして扱えます。

メールアドレスの比較

メールアドレスは、仕様上「ローカル部(@の前)は大小区別する可能性がある」とされていますが、
実務では「大文字・小文字を区別しない」運用がほとんどです。

$email = $_POST['email'] ?? '';

$normalizedEmail = toLower($email);
PHP

DB に保存するときも、検索するときも、
小文字にそろえておくと扱いやすくなります。


「小文字化」のタイミングをどう設計するか

入力時に正規化するか、比較時に正規化するか

設計としては、大きく2パターンあります。

  1. 保存前に小文字化しておく
    • DB には「すでに小文字化された値」だけが入る
    • 比較もシンプル(そのまま比較)
  2. 比較のたびに小文字化する
    • DB には「元の入力」がそのまま残る
    • 比較のときに toLower() をかけてから比べる

実務では、ログインIDやメールアドレスのような「識別子」は、
1 の「保存前に正規化しておく」方がシンプルでバグりにくいです。


まとめ:今日からの「英字をすべて小文字」の基準

押さえておきたいポイントをコンパクトにまとめます。

  • 英字を小文字にする基本は strtolower だが、国際化を考えるなら mb_strtolower を使う。
  • プロジェクト共通のユーティリティとして toLower() のような関数を用意しておくと、どこでも同じルールで小文字化できる。
  • ログインIDやメールアドレスなど、「大文字・小文字を区別したくない識別子」は、保存前に小文字にそろえておくと設計がシンプルになる。

ユーティリティとしては、まずはこれ一つを置いておけば十分です。

function toLower(string $text): string
{
    return mb_strtolower($text, 'UTF-8');
}
PHP

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