【PHP8.x】strtoupper関数の使い方

strtoupper関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

strtoupper関数は、指定された文字列内のすべてのアルファベットを大文字に変換する関数です。この関数は、引数として変換したい文字列を1つ受け取ります。例えば、「php is fun」という文字列を渡した場合、「PHP IS FUN」という文字列が返されます。数字、記号、スペースなどのアルファベット以外の文字は変更されずにそのまま保持されます。戻り値は、すべてのアルファベットが大文字に変換された新しい文字列です。元の文字列は変更されません。

この関数は、主にシングルバイト文字(ASCII文字セットの英数字など)の変換に特化しています。したがって、現在のロケール設定によっては特定の文字(例: ドイツ語のウムラウトなど)の変換挙動が異なる場合があります。特に注意すべき点として、strtoupper関数はマルチバイト文字(日本語や中国語などの複数バイトで表現される文字)を正しく処理することができません。マルチバイト文字を含む文字列に対してこの関数を使用すると、文字化けや意図しない結果が生じる可能性があります。

マルチバイト文字を安全かつ確実に大文字に変換したい場合は、PHPのmbstring拡張が提供するmb_strtoupper関数を使用することを強くお勧めします。mb_strtoupper関数は、文字エンコーディングを指定してマルチバイト文字を正確に処理できます。strtoupper関数は、主に英数字のみで構成される文字列の正規化や、比較、表示形式の統一などの用途に適しています。

構文(syntax)

1strtoupper("string");

引数(parameters)

string $string

  • string $string: 全て大文字に変換したい文字列を指定します。

戻り値(return)

string

引数で渡された文字列をすべて大文字に変換した新しい文字列を返します。

サンプルコード

PHP strtoupperとmb_strtoupperによるアクセント文字大文字化

1<?php
2
3/**
4 * このスクリプトは、PHPのstrtoupper関数がアクセント付き文字(マルチバイト文字)に対して
5 * どのように動作するかを示し、正しく大文字化するためのmb_strtoupper関数の使用例を提供します。
6 *
7 * PHPのstrtoupper関数は、基本的にASCII文字のみを対象として設計されており、
8 * UTF-8などのマルチバイト文字、特にアクセント付き文字を正しく大文字化できません。
9 * mb_strtoupper関数は、マルチバイト文字エンコーディングを考慮して大文字化を行います。
10 */
11
12// 内部エンコーディングをUTF-8に設定します。
13// これにより、mb_strtoupperが正しく動作するための環境が整います。
14mb_internal_encoding("UTF-8");
15
16// アクセント付き文字を含む文字列を定義します。
17$inputString = "déjà vu, café, über alles";
18echo "元の文字列: " . $inputString . PHP_EOL;
19
20// strtoupper関数を使用して文字列を大文字化します。
21// アクセント付き文字は正しく処理されないことに注意してください。
22$uppercaseStr = strtoupper($inputString);
23echo "strtoupperの結果 (アクセント付き文字が変化しない): " . $uppercaseStr . PHP_EOL;
24
25// mb_strtoupper関数を使用して文字列を大文字化します。
26// こちらはアクセント付き文字も正しく大文字化します。
27$mbUppercaseStr = mb_strtoupper($inputString);
28echo "mb_strtoupperの結果 (アクセント付き文字も正しく大文字化される): " . $mbUppercaseStr . PHP_EOL;
29
30// 日本語の例(参考)
31$japaneseString = "こんにちは、世界!";
32echo "元の日本語文字列: " . $japaneseString . PHP_EOL;
33echo "strtoupperの結果 (日本語は変化しない): " . strtoupper($japaneseString) . PHP_EOL;
34echo "mb_strtoupperの結果 (日本語は変化しないが、strtoupperよりは推奨される): " . mb_strtoupper($japaneseString) . PHP_EOL;
35
36?>

PHPのstrtoupper関数は、指定された文字列内のすべてのアルファベットを大文字に変換する役割を持ちます。この関数には、大文字に変換したい文字列を引数として一つ渡し、変換後の大文字文字列が戻り値として返されます。

strtoupper関数は主にASCII文字(半角英数字など)の変換に特化して設計されており、アクセント付き文字のようなマルチバイト文字に対しては注意が必要です。サンプルコードの実行結果からもわかるように、「déjà vu」のようなアクセント付き文字を含む文字列をstrtoupperで変換した場合、アクセント付き文字の部分は正しく大文字化されず、元の文字のまま出力されます。これは、strtoupperがマルチバイト文字エンコーディングを適切に処理できないためです。

このような問題を解決し、アクセント付き文字を含むマルチバイト文字列を正しく大文字に変換するには、PHPのmb_strtoupper関数を使用します。mb_strtoupperは、mb_internal_encodingで設定された内部エンコーディング(サンプルコードではUTF-8に設定)を考慮して大文字化処理を行うため、アクセント付き文字も期待通りに大文字に変換できます。システム開発において、特に多言語対応や国際化が必要なアプリケーションを扱う際には、文字エンコーディングの特性を理解し、mb_strtoupperのようなマルチバイト対応関数を選択することが重要です。

strtoupper関数は、基本的にASCII文字の大文字化に特化しており、アクセント付き文字を含むマルチバイト文字(例: UTF-8のフランス語やドイツ語)を正しく大文字化できません。そのため、このような文字を確実に大文字化したい場合は、必ずmb_strtoupper関数を使用してください。mb_strtoupperを正しく機能させるためには、事前にmb_internal_encoding("UTF-8");のように、スクリプトの内部エンコーディングを適切に設定することが非常に重要です。この設定を怠ると、意図しない変換や文字化けが発生する可能性があります。また、日本語のひらがなや漢字のような全角文字は、strtouppermb_strtoupperも大文字化の対象外となりますのでご注意ください。

PHPで文字列の先頭を大文字にする

1<?php
2
3/**
4 * 文字列の最初の文字を大文字に変換します。
5 * strtoupper関数を使い、最初の文字のみを対象とします。
6 *
7 * @param string $text 入力文字列
8 * @return string 最初の文字が大文字に変換された文字列
9 */
10function capitalizeFirstCharacter(string $text): string
11{
12    // 空の文字列の場合はそのまま返す
13    if (empty($text)) {
14        return '';
15    }
16
17    // 文字列の最初の1文字を切り出し、strtoupperで大文字に変換
18    // その後、残りの文字列(2文字目以降)と結合する
19    return strtoupper(mb_substr($text, 0, 1, 'UTF-8')) . mb_substr($text, 1, null, 'UTF-8');
20}
21
22// サンプルコードの実行
23$inputString1 = "hello world";
24echo "元の文字列: " . $inputString1 . PHP_EOL;
25echo "最初の文字を大文字にした文字列: " . capitalizeFirstCharacter($inputString1) . PHP_EOL; // 出力: Hello world
26
27$inputString2 = "php programming";
28echo "元の文字列: " . $inputString2 . PHP_EOL;
29echo "最初の文字を大文字にした文字列: " . capitalizeFirstCharacter($inputString2) . PHP_EOL; // 出力: Php programming
30
31$inputString3 = "a";
32echo "元の文字列: " . $inputString3 . PHP_EOL;
33echo "最初の文字を大文字にした文字列: " . capitalizeFirstCharacter($inputString3) . PHP_EOL; // 出力: A
34
35$inputString4 = "";
36echo "元の文字列: '" . $inputString4 . "'" . PHP_EOL;
37echo "最初の文字を大文字にした文字列: '" . capitalizeFirstCharacter($inputString4) . "'" . PHP_EOL; // 出力: ''
38
39$inputString5 = "日本語";
40echo "元の文字列: " . $inputString5 . PHP_EOL;
41echo "最初の文字を大文字にした文字列: " . capitalizeFirstCharacter($inputString5) . PHP_EOL; // 出力: 日本語 (strtoupperはアルファベットにのみ適用されるため、日本語の文字自体は変化しない)
42
43?>

PHPのstrtoupper関数は、指定された文字列内のアルファベット文字をすべて大文字に変換して返す機能を提供します。この関数には、大文字に変換したい文字列をstring型で引数として渡します。処理が完了すると、大文字に変換された新しい文字列がstring型で戻り値として返されます。

このサンプルコードでは、strtoupper関数を応用して、文字列全体の変換ではなく、文字列の最初の文字だけを大文字に変換する方法を示しています。その処理はcapitalizeFirstCharacterというカスタム関数内で実行されます。

capitalizeFirstCharacter関数は、まず入力された文字列が空であるかどうかを確認し、空の場合にはそのまま空文字列を返します。次に、mb_substr関数を利用して文字列の最初の1文字を取り出し、その1文字をstrtoupper関数で大文字に変換します。mb_substrは、日本語のようなマルチバイト文字でも正確に1文字として扱うために使われます。最後に、大文字に変換された最初の1文字と、mb_substrで取り出した残りの文字列(2文字目以降)を結合することで、最初の文字のみが大文字に変換された新しい文字列が生成され、戻り値として返されます。

例えば、「hello world」という文字列が入力された場合、「Hello world」と出力されます。「php programming」であれば「Php programming」になります。ただし、「日本語」のようにアルファベット以外の文字が最初の文字として渡された場合、strtoupper関数はアルファベットにのみ作用するため、その文字自体は変化しません。

strtoupper関数は、英字のみを大文字に変換します。日本語などのマルチバイト文字や数字、記号は変換対象外となる点にご注意ください。そのため、サンプルコードのように日本語の文字列を与えても、日本語の文字自体は大文字になりません。

マルチバイト文字を含む文字列を扱う際には、strtoupper単独ではなく、mb_substrのように「mb_」プレフィックスが付く関数と組み合わせて使用することが推奨されます。これにより、文字の切り出しなどで文字化けや意図しない結果を防ぐことができます。mb_substrを使用する際は、エンコーディング(例: 'UTF-8')を正しく指定することが非常に重要です。

また、入力文字列が空の場合でも安全に動作するよう、empty()などで事前にチェックする処理は、エラーを防ぎ、コードの堅牢性を高める上で非常に有効です。これらの点を意識してコードを記述することで、より安全で正確な文字列処理が可能となります。

関連コンテンツ