「英字をすべて大文字」にする目的を整理する
まず、「なんでわざわざ全部大文字にするのか?」をはっきりさせておきます。
よくある目的はこんな感じです。
- コードやIDを「大文字で統一」して見た目とルールを揃えたい
- 比較するときに、大文字・小文字の違いを気にしたくない
- ログや帳票で「英字は全部大文字」というフォーマットに合わせたい
例えば、ユーザーがこう入力してきたとします。
abc123
Abc123
ABC123
これらをすべて "ABC123" にそろえて扱えたら、
比較も検索もだいぶシンプルになります。
PHP の基本:strtoupper で大文字化する
一番シンプルな大文字化
PHP には、英字を大文字に変換するための基本関数 strtoupper() があります。
$text = "Hello world 123";
$upper = strtoupper($text);
echo $upper;
// HELLO WORLD 123
PHP動きはとてもシンプルです。
- a〜z を A〜Z に変換する
- 英字以外(数字・記号・日本語など)はそのまま
$text = "id: abc123 日本語";
echo strtoupper($text);
// ID: ABC123 日本語
PHP英字だけが大文字になり、日本語や数字は変わりません。
「英字だけ」の世界ならまずはこれで十分
ログインID、商品コード、英字だけの識別子など、
「基本的に ASCII の英字だけ」という前提なら、strtoupper() だけで問題ありません。
マルチバイトやアクセント付き文字を考えるなら mb_strtoupper
どこで困るのか
多言語対応を考えると、こんな文字も出てきます。
ä ö ü ß é ç
strtoupper() は、こういった「ASCII 以外の文字」にはきちんと対応していません。
つまり、「大文字→小文字」「小文字→大文字」の変換が正しく行われないことがあります。
国際化されたシステムや、ヨーロッパ系言語を扱う場合は、
マルチバイト対応の大文字化を使う方が安全です。
mb_strtoupper の基本
そこで使えるのが mb_strtoupper() です。
$upper = mb_strtoupper(string $string, ?string $encoding = null);
PHP使い方はこうです。
$text = "äöü abc";
$upper = mb_strtoupper($text, 'UTF-8');
echo $upper;
// ÄÖÜ ABC
PHPmb_strtoupper は、指定したエンコーディング(UTF-8 など)に従って、
「その言語として正しい大文字」に変換してくれます。
実務で UTF-8 前提なら、
「英字を大文字にするユーティリティは mb_strtoupper を使う」と決めてしまうのがおすすめです。
実務ユーティリティとして関数にまとめる
「英字をすべて大文字」にする共通関数
プロジェクト全体で使い回せるように、ユーティリティ関数にしておきましょう。
/**
* 英字をすべて大文字に変換(UTF-8 前提)
*
* @param string $text
* @return string
*/
function toUpper(string $text): string
{
// 国際化も意識して mb_strtoupper を優先
return mb_strtoupper($text, 'UTF-8');
}
PHP使い方はとてもシンプルです。
$rawCode = $_POST['product_code'] ?? '';
$code = toUpper($rawCode);
echo $code;
PHPこれで、
- “abc-001”
- “Abc-001”
- “ABC-001”
のどれが来ても、すべて "ABC-001" にそろえられます。
どんな場面で使うと効果的か
例1:商品コード・会員コードなどを「大文字で統一」したい
商品コードや会員コードを「大文字英字+数字」で運用したい場合、
保存前に必ず大文字化しておくと、運用がとても楽になります。
$rawCode = $_POST['product_code'] ?? '';
// 入力を大文字に統一
$code = toUpper($rawCode);
// DB には $code をそのまま保存
PHPこうしておくと、
- 検索時も
toUpper()をかけてから比較すればよい - 「小文字で入れちゃった」などの揺れを気にしなくてよい
という状態になります。
例2:ログや帳票で「英字は全部大文字」にしたい
ログ出力や帳票フォーマットで、
「英字は全部大文字で出す」というルールにしておくと、視認性が上がることがあります。
$level = "info";
$message = "user login";
$logLine = sprintf(
"[%s] %s",
toUpper($level),
$message
);
echo $logLine;
// [INFO] user login
PHPレベル名だけ大文字にしておくと、ログを目で追いやすくなります。
「大文字化」と比較ロジックの関係
比較前に正規化する、という発想
大文字・小文字を区別したくない比較では、
「比較前にどちらも同じ形にそろえる」のが鉄板パターンです。
$input = $_POST['code'] ?? '';
$stored = $row['code'] ?? '';
// どちらも大文字にそろえてから比較
if (toUpper($input) === toUpper($stored)) {
// 同じコードとみなす
}
PHPここで「大文字にそろえるか」「小文字にそろえるか」は好みですが、
「どちらかに必ず統一する」という発想が大事です。
まとめ:今日からの「英字をすべて大文字」の基準
押さえておきたいポイントをコンパクトにまとめます。
- 英字を大文字にする基本は
strtoupperだが、UTF-8 前提・多言語対応を考えるならmb_strtoupperを使う。 - プロジェクト共通のユーティリティとして
toUpper()のような関数を用意しておくと、どこでも同じルールで大文字化できる。 - コード・ID・ログレベルなど、「表記をそろえたい英字」は、保存前・比較前に大文字に統一しておくと設計がシンプルになる。
ユーティリティとしては、まずはこの関数を一つ置いておけば十分です。
function toUpper(string $text): string
{
return mb_strtoupper($text, 'UTF-8');
}
PHP