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

作成日: 更新日:

mb_strtoupper関数は、指定された文字列のすべてのアルファベットを大文字に変換して返す関数です。この関数の最大の特徴は、日本語や中国語のようなマルチバイト文字(複数のバイトで表現される文字)を含む文字列でも、正しく大文字に変換できる点にあります。一般的なstrtoupper関数は主にASCII文字に特化しているため、マルチバイト文字を扱うと文字化けや意図しない結果を招く可能性がありますが、mb_strtoupperはその問題を解決します。

この関数は、第一引数に大文字に変換したい文字列を、第二引数にその文字列の文字エンコーディング(文字コード)を指定します。文字エンコーディングの指定は任意ですが、異なる文字エンコーディングの文字列を扱う際には、明示的に指定することでより確実に処理を行うことができます。エンコーディングが省略された場合は、PHPの内部設定されているエンコーディングが自動的に使用されます。

例えば、ユーザーからの入力値をデータベースに格納する前に大文字に統一したい場合や、検索キーワードの大文字・小文字を区別しない処理を実現したい場合などに非常に有効です。正しくエンコーディングを指定することは、文字化けを防ぎ、期待通りの変換結果を得る上で重要です。無効なエンコーディングが指定された場合にはエラーが発生することもありますので、注意が必要です。成功した場合、変換された新しい文字列が返されます。

基本的な使い方

構文(syntax)

<?php

mb_strtoupper(string $string, ?string $encoding = null): string

?>

引数(parameters)

string $string, ?string $encoding = null

  • string $string: 大文字に変換したい文字列
  • ?string $encoding = null: 文字エンコーディングを指定する文字列。指定しない場合は内部エンコーディングが使用されます。

戻り値(return)

string

引数で指定された文字列を、指定された文字エンコーディングに基づいて大文字に変換した新しい文字列を返します。

サンプルコード

PHP 8: mb_strtoupper でマルチバイト文字列を大文字にする

<?php

// 内部エンコーディングをUTF-8に設定します。
// これにより、mb_strtoupperなどのマルチバイト関数が正しく動作するようになります。
mb_internal_encoding("UTF-8");

// 変換するマルチバイト文字列を定義します。
$originalString = "こんにちは、PHPの世界へようこそ! MultiByte String Example.";

echo "元の文字列: " . $originalString . PHP_EOL;

// mb_strtoupper関数を使用して文字列を大文字に変換します。
// 第二引数でエンコーディングを指定できますが、mb_internal_encoding()が設定されていれば省略可能です。
// この例ではUTF-8エンコーディングが適用されます。
$upperCaseString = mb_strtoupper($originalString);

echo "大文字に変換後: " . $upperCaseString . PHP_EOL;

// エンコーディングを明示的に指定する例 (通常はmb_internal_encoding()で十分ですが、知っておくと便利です)
$anotherString = "これは別の文字列です。";
echo PHP_EOL . "別の元の文字列 (エンコーディング指定あり): " . $anotherString . PHP_EOL;
$upperCaseStringWithEncoding = mb_strtoupper($anotherString, "UTF-8");
echo "大文字に変換後 (エンコーディング指定あり): " . $upperCaseStringWithEncoding . PHP_EOL;

?>

PHPのmb_strtoupper関数は、マルチバイト文字を含む文字列を安全に大文字に変換するために使用されます。一般的なstrtoupper関数では、日本語などのマルチバイト文字が正しく処理できない場合があるため、国際化されたアプリケーションではmb_strtoupperの利用が推奨されます。

この関数の第一引数$stringには、大文字に変換したい元の文字列を渡します。第二引数$encodingは省略可能な引数で、文字列のエンコーディングを指定するために使用します。この引数を省略するかnullを指定した場合、事前にmb_internal_encoding()関数で設定された内部エンコーディングが自動的に適用されます。関数は、変換された新しい文字列を戻り値として返します。

サンプルコードでは、まずmb_internal_encoding("UTF-8");と設定することで、UTF-8エンコーディングでのマルチバイト文字列処理を有効にしています。これにより、「こんにちは、PHPの世界へようこそ! MultiByte String Example.」のような日本語と英字が混在する文字列でも、英字部分が正しく大文字に変換されます。日本語のひらがなやカタカナには大文字小文字の区別がないため変化しませんが、英字部分は適切に大文字化された文字列が得られます。このように、mb_strtoupperは様々な言語の文字列を扱う際に、文字化けや予期せぬ挙動を防ぐための重要な関数です。

mb_strtoupperは、日本語のようなマルチバイト文字を正しく大文字に変換するために使用します。通常のstrtoupper関数はマルチバイト文字に対応していないため、文字化けを防ぐには必ずmb_strtoupperを選んでください。

この関数を使う前には、mb_internal_encoding関数でPHPの内部エンコーディングを適切に設定することが非常に重要です。設定がないと、正しく変換されなかったり、予期せぬエラーが発生したりする原因となります。mb_strtoupperの第二引数でエンコーディングを明示的に指定することも可能ですが、mb_internal_encodingが設定されていれば省略しても問題なく動作します。システム全体でエンコーディング設定を統一することで、一貫性と安全性を確保できます。

PHP mb_strtoupperでUTF-8文字列を大文字に変換する

<?php

/**
 * 日本語などのマルチバイト文字列をUTF-8エンコーディングで大文字に変換するサンプルコードです。
 * mb_strtoupper関数は、標準の strtoupper 関数では正しく処理できないマルチバイト文字を
 * 大文字に変換するために使用されます。
 */
function convertMultibyteStringToUppercase(): void
{
    // 日本語を含む元の文字列を定義します。
    // この文字列には、ひらがな、カタカナ、漢字、英字が混在しています。
    $originalString = "こんにちは世界! PHPへようこそ (Hello World!)。";

    // 使用するエンコーディングをUTF-8に指定します。
    // 日本語を正しく処理するためには、このエンコーディングの指定が非常に重要です。
    $encoding = "UTF-8";

    echo "元の文字列: " . $originalString . PHP_EOL;
    echo "使用エンコーディング: " . $encoding . PHP_EOL . PHP_EOL;

    // mb_strtoupper関数を使用して文字列を大文字に変換します。
    // 第1引数に変換したい文字列、第2引数にエンコーディングを指定します。
    $uppercaseString = mb_strtoupper($originalString, $encoding);

    echo "大文字に変換後の文字列: " . $uppercaseString . PHP_EOL;

    // 参考: mb_strtoupper を使用しない場合(標準の strtoupper 関数)
    // 日本語などのマルチバイト文字は正しく処理されません(環境によっては文字化けや意図しない結果になる)。
    // このコメントアウトされた行を実行すると違いが確認できます。
    // echo "strtoupperでの変換結果: " . strtoupper($originalString) . PHP_EOL;
}

// 関数を実行します。
convertMultibyteStringToUppercase();

PHPのmb_strtoupper関数は、日本語のようなマルチバイト文字を含む文字列を安全かつ正確に大文字に変換するために利用されます。一般的なstrtoupper関数では、マルチバイト文字を正しく処理できず、予期せぬ文字化けや誤った結果を招くことがありますが、mb_strtoupperはこの問題を解決します。

この関数は二つの引数を取ります。一つ目の引数$stringには、大文字に変換したい元の文字列を指定します。二つ目の引数$encodingは、その文字列がどの文字エンコーディングで記述されているかを指定するもので、特に日本語を扱う際には"UTF-8"のように正しいエンコーディングを指定することが非常に重要です。この引数を省略した場合、PHPの内部エンコーディング設定が使用されますが、明示的に指定することでより安定した処理が可能です。mb_strtoupperは、これらの引数に基づいて大文字に変換された新しい文字列を戻り値として返します。

提示されたサンプルコードでは、「こんにちは世界! PHPへようこそ (Hello World!)。」という日本語と英字が混在した文字列を"UTF-8"エンコーディングでmb_strtoupper関数に渡しています。その結果、英字部分が全て大文字に変換され、「こんにちは世界! PHPへようこそ (HELLO WORLD!)。」という期待通りの出力が得られます。このように、多言語環境や国際化されたアプリケーションで文字列を大文字化する際に、mb_strtoupperは欠かせない関数です。

このサンプルコードにおけるmb_strtoupper関数の利用では、日本語などのマルチバイト文字列を正しく処理するため、第2引数でUTF-8エンコーディングを明示的に指定している点が重要です。初心者が陥りやすい間違いとして、このエンコーディング指定を怠る、または誤ったエンコーディングを指定すると、文字化けや期待と異なる変換結果になることがあります。常に扱う文字列のエンコーディングを正確に把握し、明示的に指定することを強く推奨いたします。また、この関数を使用するには、PHP環境でmbstringエクステンションが有効になっている必要がありますので、事前に確認してください。通常のstrtoupper関数はマルチバイト文字に対応せず、mb_strtoupperも日本語のひらがなや漢字は大文字・小文字の区別がないため変換されない点を理解しておきましょう。

【PHP8.x】mb_strtoupper関数の使い方 | いっしー@Webエンジニア