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

PHP PHP
スポンサーリンク

「英字をすべて大文字」にする目的を整理する

まず、「なんでわざわざ全部大文字にするのか?」をはっきりさせておきます。

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

  • コードや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
PHP

mb_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

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