「英字をすべて小文字」にする目的をはっきりさせる
まず、なぜ「全部小文字」にしたいのかを整理しておきます。
よくある目的はこんな感じです。
- ユーザー名やログイン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
PHPmb_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);
PHPDB に保存するときも、検索するときも、
小文字にそろえておくと扱いやすくなります。
「小文字化」のタイミングをどう設計するか
入力時に正規化するか、比較時に正規化するか
設計としては、大きく2パターンあります。
- 保存前に小文字化しておく
- DB には「すでに小文字化された値」だけが入る
- 比較もシンプル(そのまま比較)
- 比較のたびに小文字化する
- DB には「元の入力」がそのまま残る
- 比較のときに
toLower()をかけてから比べる
実務では、ログインIDやメールアドレスのような「識別子」は、
1 の「保存前に正規化しておく」方がシンプルでバグりにくいです。
まとめ:今日からの「英字をすべて小文字」の基準
押さえておきたいポイントをコンパクトにまとめます。
- 英字を小文字にする基本は
strtolowerだが、国際化を考えるならmb_strtolowerを使う。 - プロジェクト共通のユーティリティとして
toLower()のような関数を用意しておくと、どこでも同じルールで小文字化できる。 - ログインIDやメールアドレスなど、「大文字・小文字を区別したくない識別子」は、保存前に小文字にそろえておくと設計がシンプルになる。
ユーティリティとしては、まずはこれ一つを置いておけば十分です。
function toLower(string $text): string
{
return mb_strtolower($text, 'UTF-8');
}
PHP