PHPで文字列の大文字・小文字を変換するには、主に以下の関数を使います。
strtolower()
strtoupper()
ucfirst()
lcfirst()
ucwords()
mb_strtolower()
mb_strtoupper()
mb_convert_case()
英数字だけを扱う場合は、strtolower() や strtoupper() などの通常の文字列関数で対応できます。
一方で、日本語サイトや多言語サイトのように、アクセント付き文字、全角英字、Unicode文字などを扱う可能性がある場合は、mb_strtolower() や mb_strtoupper() などのマルチバイト対応関数を使うのが安全です。
特に実務では、ユーザー入力、検索キーワード、メールアドレス、URLスラッグ、商品名、記事タイトルなどを扱うことが多いため、文字コードやマルチバイト文字への対応を意識する必要があります。
PHPで小文字に変換する方法
strtolower()で小文字に変換する
PHPで英字を小文字に変換するには、strtolower() を使います。
$text = "Hello World";
echo strtolower($text);
出力結果は以下の通りです。
hello world
strtolower() は、文字列内の大文字アルファベットを小文字に変換する関数です。
$name = "TARO YAMADA";
echo strtolower($name);
出力結果:
taro yamada
ただし、strtolower() が安全に扱えるのは、基本的にASCII範囲の英字です。
たとえば、以下のような文字列では注意が必要です。
$text = "CAFÉ";
echo strtolower($text);
この場合、C、A、F のようなASCII英字は小文字に変換されますが、É のような非ASCII文字は期待通りに変換されない可能性があります。
そのため、アクセント付き文字や多言語文字を含む可能性がある場合は、後述する mb_strtolower() を使うのがおすすめです。
mb_strtolower()でマルチバイト文字を小文字に変換する
日本語サイトや多言語サイトでは、strtolower() ではなく mb_strtolower() を使うと安全です。
$text = "HELLO CAFÉ";
echo mb_strtolower($text, 'UTF-8');
出力例:
hello café
mb_strtolower() は、マルチバイト文字列に対応した小文字変換関数です。
通常の英字だけでなく、アクセント付き文字などの非ASCII文字も考慮して変換できます。
$text = "PHP PROGRAMMING";
$lower = mb_strtolower($text, 'UTF-8');
echo $lower;
出力結果:
php programming
実務では、エンコーディングに 'UTF-8' を明示しておくとわかりやすいです。
mb_strtolower($text, 'UTF-8');
現在のWebサイトではUTF-8を使うことが一般的なため、特別な理由がなければこの書き方で問題ありません。
PHPで大文字に変換する方法
strtoupper()で大文字に変換する
PHPで英字を大文字に変換するには、strtoupper() を使います。
$text = "Hello World";
echo strtoupper($text);
出力結果:
HELLO WORLD
strtoupper() は、文字列内の小文字アルファベットを大文字に変換する関数です。
$text = "php programming";
echo strtoupper($text);
出力結果:
PHP PROGRAMMING
ただし、strtoupper() も strtolower() と同じく、基本的にはASCII範囲の英字を対象にした関数です。
そのため、以下のような文字列を扱う場合は注意が必要です。
$text = "café";
echo strtoupper($text);
アクセント付き文字などを含む場合、期待通りに大文字化されない可能性があります。
多言語対応を考えるなら、mb_strtoupper() を使いましょう。
mb_strtoupper()でマルチバイト文字を大文字に変換する
非ASCII文字を含む文字列を大文字に変換したい場合は、mb_strtoupper() を使います。
$text = "hello café";
echo mb_strtoupper($text, 'UTF-8');
出力例:
HELLO CAFÉ
mb_strtoupper() は、マルチバイト文字列に対応した大文字変換関数です。
$text = "php programming";
$upper = mb_strtoupper($text, 'UTF-8');
echo $upper;
出力結果:
PHP PROGRAMMING
英語だけを扱う小さな処理であれば strtoupper() でも十分ですが、ユーザー入力や多言語文字列を扱うWebアプリケーションでは、mb_strtoupper() を使うほうが安全です。
文字列の先頭だけ大文字・小文字に変換する方法
ucfirst()で先頭1文字を大文字にする
文字列の先頭1文字だけを大文字にしたい場合は、ucfirst() を使います。
$text = "hello world";
echo ucfirst($text);
出力結果:
Hello world
ucfirst() は、文字列全体ではなく、最初の1文字だけを大文字に変換します。
$title = "php basics";
echo ucfirst($title);
出力結果:
Php basics
ここで注意したいのは、ucfirst() は単語ごとの先頭文字を大文字にする関数ではないという点です。
たとえば、以下のように書いても、2語目の world は大文字になりません。
$text = "hello world";
echo ucfirst($text);
出力結果:
Hello world
単語ごとの先頭文字を大文字にしたい場合は、後述する ucwords() を使います。
lcfirst()で先頭1文字を小文字にする
文字列の先頭1文字だけを小文字にしたい場合は、lcfirst() を使います。
$text = "Hello World";
echo lcfirst($text);
出力結果:
hello World
lcfirst() は、文字列の最初の1文字だけを小文字に変換します。
$className = "UserController";
echo lcfirst($className);
出力結果:
userController
クラス名から変数名を作る場合などに使われることがあります。
ただし、ucfirst() や lcfirst() も、基本的にはASCII範囲の英字を対象にした関数として考えたほうが安全です。
非ASCII文字を含む文字列を扱う場合は、mb_convert_case() などのマルチバイト対応関数を検討しましょう。
単語ごとの先頭文字を大文字に変換する方法
ucwords()で各単語の先頭を大文字にする
文字列内の各単語の先頭文字を大文字にしたい場合は、ucwords() を使います。
$text = "hello world";
echo ucwords($text);
出力結果:
Hello World
名前や簡単な英語タイトルを整形するときに便利です。
$name = "taro yamada";
echo ucwords($name);
出力結果:
Taro Yamada
ただし、ucwords() は本格的なタイトルケースを作る関数ではありません。
たとえば、英語の記事タイトルでは、and、of、the などを小文字のままにするルールがあります。
しかし、ucwords() はそのような文法的判断までは行いません。
$title = "the lord of the rings";
echo ucwords($title);
出力結果:
The Lord Of The Rings
自然な英語タイトルとしては、of や the の扱いを別途調整したい場合があります。
また、ucwords() もASCII中心の関数として考える必要があります。
多言語文字列を扱う場合は、mb_convert_case() を使うほうが安全です。
mb_convert_case()で大文字・小文字を柔軟に変換する方法
mb_convert_case()の基本的な使い方
mb_convert_case() は、指定したモードに応じて文字列を変換できる関数です。
大文字化、小文字化、タイトルケース化などを柔軟に行えます。
$text = "hello world";
echo mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');
echo mb_convert_case($text, MB_CASE_LOWER, 'UTF-8');
echo mb_convert_case($text, MB_CASE_TITLE, 'UTF-8');
出力例:
HELLO WORLD
hello world
Hello World
主なモードは以下の通りです。
| モード | 内容 |
|---|---|
MB_CASE_UPPER | 大文字に変換する |
MB_CASE_LOWER | 小文字に変換する |
MB_CASE_TITLE | 単語の先頭を大文字に変換する |
MB_CASE_FOLD | 大文字・小文字の差をなくす比較向けの変換を行う |
基本的な大文字・小文字変換であれば、以下のように使えます。
$text = "Hello PHP";
$upper = mb_convert_case($text, MB_CASE_UPPER, 'UTF-8');
$lower = mb_convert_case($text, MB_CASE_LOWER, 'UTF-8');
$title = mb_convert_case($text, MB_CASE_TITLE, 'UTF-8');
echo $upper . PHP_EOL;
echo $lower . PHP_EOL;
echo $title . PHP_EOL;
出力例:
HELLO PHP
hello php
Hello Php
MB_CASE_TITLEを使うときの注意点
MB_CASE_TITLE を使うと、単語の先頭を大文字にできます。
$text = "hello php world";
echo mb_convert_case($text, MB_CASE_TITLE, 'UTF-8');
出力例:
Hello Php World
ただし、MB_CASE_TITLE はSEO記事のタイトルや英語見出しを自然な形に整えるための関数ではありません。
たとえば、以下のような文字列があるとします。
$title = "learn php and html";
echo mb_convert_case($title, MB_CASE_TITLE, 'UTF-8');
出力例:
Learn Php And Html
このように、PHP や HTML のような略語も Php、Html のように変換される可能性があります。
また、and、of、the などを文法ルールに従って小文字にするわけでもありません。
そのため、記事タイトルや商品名を整形する場合は、必要に応じて例外処理を追加します。
$title = "learn php and html";
$title = mb_convert_case($title, MB_CASE_TITLE, 'UTF-8');
$title = str_replace(['Php', 'Html'], ['PHP', 'HTML'], $title);
echo $title;
出力結果:
Learn PHP And HTML
より自然なタイトルにしたい場合は、略語や固有名詞の辞書を用意して補正するのがおすすめです。
日本語サイトで大文字・小文字変換を行うときの注意点
日本語そのものには基本的に大文字・小文字の概念がない
日本語のひらがな、カタカナ、漢字には、英字のような大文字・小文字の概念は基本的にありません。
そのため、以下のような文字列に対して大文字・小文字変換を行っても、日本語部分は変化しません。
$text = "こんにちは PHP";
echo mb_strtoupper($text, 'UTF-8');
出力例:
こんにちは PHP
ただし、日本語サイトでは、英字や数字が混ざるケースがよくあります。
$text = "商品コードabc123";
このような文字列では、英字部分だけを変換することがあります。
$text = "商品コードabc123";
echo mb_strtoupper($text, 'UTF-8');
出力例:
商品コードABC123
全角英字の変換には注意する
日本語サイトでは、ユーザーが全角英字を入力することがあります。
PHP
ABC
Taro
このような全角英字は、大文字・小文字変換だけでは扱いづらい場合があります。
全角英数字を半角に変換したい場合は、mb_convert_kana() を使います。
$text = "ABC123";
echo mb_convert_kana($text, 'as', 'UTF-8');
出力結果:
ABC123
mb_convert_kana() の主なモードは以下です。
| モード | 内容 |
|---|---|
a | 全角英数字などを半角へ変換 |
A | 半角英数字などを全角へ変換 |
r | 全角英字を半角へ変換 |
R | 半角英字を全角へ変換 |
n | 全角数字を半角へ変換 |
N | 半角数字を全角へ変換 |
s | 全角スペースを半角スペースへ変換 |
S | 半角スペースを全角スペースへ変換 |
たとえば、全角英数字と全角スペースを半角にそろえてから小文字化する場合は、以下のように書けます。
$input = " PHP Basic ";
// 全角英数字・全角スペースを半角へ変換
$input = mb_convert_kana($input, 'as', 'UTF-8');
// 前後の空白を削除
$input = trim($input);
// 小文字に変換
$input = mb_strtolower($input, 'UTF-8');
echo $input;
出力結果:
php basic
日本語フォームの入力値を正規化する場合は、mb_convert_kana() と mb_strtolower() を組み合わせると便利です。
大文字・小文字変換で文字数が変わるケース
Unicode文字では変換後に文字数が変わることがある
英字の大文字・小文字変換では、基本的に1文字が1文字に変換されるイメージを持ちやすいです。
しかし、Unicode文字では、大文字・小文字変換によって文字数が変わる場合があります。
代表的な例が、ドイツ語の ß です。
$text = "Straße";
echo mb_strtoupper($text, 'UTF-8');
出力例:
STRASSE
このように、ß が SS に変換される場合があります。
つまり、変換前は1文字だったものが、変換後に2文字になることがあります。
そのため、以下のような処理では注意が必要です。
- 文字数制限をかける処理
- 指定文字数で切り取る処理
- 文字位置を使って処理するロジック
- データベースのカラム長に合わせる処理
- 表示幅を調整する処理
たとえば、文字数を制限したい場合は、変換前ではなく、変換後の文字列に対して長さを確認するほうが安全です。
$text = "Straße";
$upper = mb_strtoupper($text, 'UTF-8');
if (mb_strlen($upper, 'UTF-8') > 10) {
echo "文字数が長すぎます";
}
メールアドレスを小文字に変換する場合
実務では小文字化されることが多い
Webサービスでは、メールアドレスを保存する前に小文字へ変換することがあります。
$email = "USER@example.COM";
$email = mb_strtolower($email, 'UTF-8');
echo $email;
出力結果:
user@example.com
ログインIDとしてメールアドレスを使う場合、表記ゆれを防ぐために小文字化する設計はよくあります。
たとえば、以下のようなメールアドレスを別ユーザーとして扱ってしまうと、重複登録やログイン時の混乱につながることがあります。
USER@example.com
user@example.com
User@example.com
そのため、多くのWebサービスでは、メールアドレスを小文字にそろえて保存・比較します。
厳密にはローカル部の扱いに注意する
ただし、メールアドレスを厳密に扱う場合は注意が必要です。
メールアドレスの @ より前の部分をローカル部、@ より後ろの部分をドメイン部と呼びます。
USER@example.com
この場合、
USER
がローカル部、
example.com
がドメイン部です。
一般的にドメイン部は大文字・小文字を区別しません。
一方で、ローカル部は仕様上、大文字・小文字を区別し得ます。
そのため、メール配送仕様を厳密に扱うシステムでは、メールアドレス全体を無条件に小文字化しないほうがよい場合があります。
慎重に処理するなら、ドメイン部だけ小文字化します。
$email = "USER@EXAMPLE.COM";
[$local, $domain] = explode('@', $email, 2);
$normalized = $local . '@' . mb_strtolower($domain, 'UTF-8');
echo $normalized;
出力結果:
USER@example.com
ただし、一般的な会員登録やログイン用途では、運用上のわかりやすさを優先して、メールアドレス全体を小文字化するケースも多いです。
重要なのは、システムの仕様として「メールアドレスの大文字・小文字をどう扱うか」を決めておくことです。
検索処理で大文字・小文字を無視する方法
小文字にそろえてから検索する
検索処理では、大文字・小文字を区別せずに比較したいことがあります。
たとえば、検索キーワードが PHP でも php でも同じ結果を返したい場合です。
そのような場合は、検索キーワードと検索対象の両方を小文字にそろえてから比較します。
$keyword = "PHP";
$title = "Learning php basics";
$keyword = mb_strtolower($keyword, 'UTF-8');
$title = mb_strtolower($title, 'UTF-8');
if (mb_strpos($title, $keyword, 0, 'UTF-8') !== false) {
echo "見つかりました";
}
出力結果:
見つかりました
mb_strtolower() で小文字に統一し、mb_strpos() で文字列が含まれているかを判定しています。
mb_strpos() は、マルチバイト文字列に対応した文字列検索関数です。
日本語や多言語文字列を扱う場合は、通常の strpos() よりも mb_strpos() を使うほうが安全です。
mb_stripos()で大文字・小文字を無視して検索する
PHPには、大文字・小文字を無視して検索するための関数もあります。
マルチバイト文字列を扱う場合は、mb_stripos() を使えます。
$title = "Learning PHP Basics";
$keyword = "php";
if (mb_stripos($title, $keyword, 0, 'UTF-8') !== false) {
echo "見つかりました";
}
出力結果:
見つかりました
mb_stripos() は、大文字・小文字を区別せずに文字列の位置を検索する関数です。
英数字だけを扱う場合は、stripos() でも対応できます。
$title = "Learning PHP Basics";
$keyword = "php";
if (stripos($title, $keyword) !== false) {
echo "見つかりました";
}
ただし、多言語文字列を扱う可能性がある場合は、mb_stripos() を使うほうが安全です。
URLスラッグやファイル名を小文字に変換する方法
URLスラッグを小文字にそろえる
Web制作では、記事タイトルや商品名からURLスラッグを作ることがあります。
URLスラッグでは、小文字に統一することがよくあります。
$title = "PHP Basic Tutorial";
$slug = mb_strtolower($title, 'UTF-8');
$slug = str_replace(' ', '-', $slug);
echo $slug;
出力結果:
php-basic-tutorial
より実務的には、前後の空白や連続する空白も処理します。
$title = " PHP Basic Tutorial ";
$slug = trim($title);
$slug = mb_strtolower($slug, 'UTF-8');
$slug = preg_replace('/\s+/', '-', $slug);
echo $slug;
出力結果:
php-basic-tutorial
ただし、実際のURLスラッグ生成では、記号の削除、全角文字の扱い、重複ハイフンの整理、URLエンコードなども考慮する必要があります。
日本語を含むスラッグでは追加処理が必要
日本語タイトルからスラッグを作る場合は、単純な小文字化だけでは不十分です。
$title = "PHP入門 基本チュートリアル";
$slug = mb_strtolower($title, 'UTF-8');
$slug = preg_replace('/\s+/', '-', trim($slug));
echo $slug;
出力例:
php入門-基本チュートリアル
このように、日本語をそのままURLに含める設計もあります。
一方で、英数字のみのスラッグにしたい場合は、ローマ字変換や別途スラッグ用の文字列を用意する必要があります。
WordPressなどのCMSでは、日本語スラッグをそのまま使うか、英数字のスラッグを手動で設定することも多いです。
PHPで大文字・小文字変換を行う実務例
ユーザー入力を正規化する
フォーム入力では、ユーザーが大文字・小文字、全角・半角を混ぜて入力することがあります。
検索用キーワードやIDの比較などでは、表記ゆれを減らすために正規化します。
$input = " PHP Basic ";
// 全角英数字・全角スペースを半角へ
$input = mb_convert_kana($input, 'as', 'UTF-8');
// 前後の空白を削除
$input = trim($input);
// 小文字へ変換
$input = mb_strtolower($input, 'UTF-8');
echo $input;
出力結果:
php basic
このように処理すると、以下のような入力の違いを吸収しやすくなります。
PHP
PHP
Php
php
商品コードや管理コードを大文字に統一する
商品コード、会員コード、クーポンコードなどは、大文字に統一することがあります。
$code = "abc-123";
$code = mb_strtoupper($code, 'UTF-8');
echo $code;
出力結果:
ABC-123
大文字に統一しておくと、ユーザーが小文字で入力しても同じコードとして扱いやすくなります。
$inputCode = "abc-123";
$registeredCode = "ABC-123";
$inputCode = mb_strtoupper($inputCode, 'UTF-8');
if ($inputCode === $registeredCode) {
echo "コードが一致しました";
}
出力結果:
コードが一致しました
表示名を整形する
名前やラベルを表示用に整形する場合、ucwords() や mb_convert_case() を使うことがあります。
$name = "taro yamada";
echo ucwords($name);
出力結果:
Taro Yamada
マルチバイト対応を意識するなら、mb_convert_case() を使います。
$name = "taro yamada";
echo mb_convert_case($name, MB_CASE_TITLE, 'UTF-8');
出力結果:
Taro Yamada
ただし、名前や固有名詞には例外が多いため、自動変換だけで完全に正しい表示になるとは限りません。
たとえば、macdonald、o'connor、van gogh のような名前は、単純なタイトルケースでは不自然になることがあります。
PHPの大文字・小文字変換でよく使う関数一覧
基本的な変換関数
| 関数 | 内容 | 使用例 |
|---|---|---|
strtolower() | ASCII英字を小文字に変換する | HELLO → hello |
strtoupper() | ASCII英字を大文字に変換する | hello → HELLO |
ucfirst() | 先頭1文字を大文字にする | hello → Hello |
lcfirst() | 先頭1文字を小文字にする | Hello → hello |
ucwords() | 各単語の先頭を大文字にする | hello world → Hello World |
マルチバイト対応の変換関数
| 関数 | 内容 | 使用例 |
|---|---|---|
mb_strtolower() | マルチバイト対応で小文字に変換する | CAFÉ → café |
mb_strtoupper() | マルチバイト対応で大文字に変換する | café → CAFÉ |
mb_convert_case() | 指定モードで大文字・小文字を変換する | hello world → Hello World |
mb_convert_kana() | 全角・半角などを変換する | ABC → ABC |
PHPで大文字・小文字変換を使い分けるポイント
英数字だけなら通常の文字列関数でよい
ASCII英字だけを扱う処理であれば、以下の関数で十分です。
strtolower()
strtoupper()
ucfirst()
lcfirst()
ucwords()
たとえば、固定された英語のコードや簡単な文字列であれば、通常の文字列関数を使っても問題ありません。
$text = "HELLO";
echo strtolower($text);
出力結果:
hello
日本語サイト・多言語サイトではmb_系を使う
日本語サイトや多言語サイトでは、基本的に mb_ 系の関数を使うのがおすすめです。
mb_strtolower()
mb_strtoupper()
mb_convert_case()
mb_strpos()
mb_stripos()
mb_strlen()
特に、ユーザーが入力する文字列を処理する場合は、どのような文字が含まれるかわかりません。
そのため、最初からマルチバイト対応の関数を使っておくと安全です。
$input = "CAFÉ PHP";
$lower = mb_strtolower($input, 'UTF-8');
echo $lower;
出力例:
café php
全角・半角変換はmb_convert_kana()を使う
大文字・小文字変換と全角・半角変換は別の処理です。
たとえば、以下の文字列を考えます。
ABC123
これを以下のようにしたい場合、
ABC123
大文字・小文字変換ではなく、全角・半角変換が必要です。
この場合は mb_convert_kana() を使います。
$text = "ABC123";
echo mb_convert_kana($text, 'as', 'UTF-8');
出力結果:
ABC123
その後、小文字にしたい場合は mb_strtolower() を組み合わせます。
$text = "ABC123";
$text = mb_convert_kana($text, 'as', 'UTF-8');
$text = mb_strtolower($text, 'UTF-8');
echo $text;
出力結果:
abc123
まとめ
PHPで大文字・小文字を変換する場合、英数字だけを扱うのか、日本語や多言語文字列を扱うのかによって使う関数が変わります。
ASCII英字だけであれば、以下の関数が使えます。
strtolower($text);
strtoupper($text);
ucfirst($text);
lcfirst($text);
ucwords($text);
日本語サイトや多言語サイトでは、以下のようなマルチバイト対応関数を使うのがおすすめです。
mb_strtolower($text, 'UTF-8');
mb_strtoupper($text, 'UTF-8');
mb_convert_case($text, MB_CASE_TITLE, 'UTF-8');
また、全角英数字を半角にしたい場合は、大文字・小文字変換ではなく mb_convert_kana() を使います。
$text = mb_convert_kana($text, 'as', 'UTF-8');
実務では、以下のように処理するケースが多いです。
$input = " PHP Basic ";
$input = mb_convert_kana($input, 'as', 'UTF-8');
$input = trim($input);
$input = mb_strtolower($input, 'UTF-8');
echo $input;
出力結果:
php basic
PHPで大文字・小文字変換を行うときは、単純に strtolower() や strtoupper() を使うだけでなく、文字コード、マルチバイト文字、全角・半角、検索や保存時の正規化まで意識すると、より安全で実務的なコードになります。
以上、PHPでの大文字・小文字の変換についてでした。
最後までお読みいただき、ありがとうございました。










