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

作成日: 更新日:

mb_strtolower関数は、マルチバイト文字列をすべて小文字に変換するために使用される関数です。通常のstrtolower関数はASCII文字(半角英数字など)にしか対応していないため、日本語や中国語、韓国語などの1バイトで表現できない文字(マルチバイト文字)を含む文字列を小文字に変換しようとすると、正しく処理されなかったり、文字化けが発生したりする可能性があります。

この関数は、そうしたマルチバイト文字を安全かつ正確に小文字に変換するために不可欠です。変換したい文字列と、その文字列のエンコーディング(文字コード)を引数として受け取ります。エンコーディングを明示的に指定することで、異なる文字コードが混在する環境でも、意図した通りの正確な変換を保証します。エンコーディングが省略された場合は、PHPの内部エンコーディング設定が適用されます。

ウェブサイトやアプリケーションでユーザーからの入力を正規化したり、検索処理のために文字列のケースを統一したりする際に特に役立ちます。国際化対応(i18n)が必要なシステム開発において、文字列の処理を確実に行うための基盤となる重要な関数です。mb_strtolower関数を使用することで、文字コードの問題に悩まされることなく、多言語対応のアプリケーションを堅牢に構築することができます。

基本的な使い方

構文(syntax)

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

引数(parameters)

string $string, ?string $encoding = null

PHP:

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

戻り値(return)

string

与えられた文字列を、指定された文字エンコーディングに従って全て小文字に変換した新しい文字列を返します。

サンプルコード

PHP mb_strtolower 未定義時の安全な利用

<?php

/**
 * mb_strtolower 関数を使用してマルチバイト文字列を小文字に変換します。
 * mbstring 拡張が有効でない場合に備え、関数の存在チェックを行います。
 *
 * システムエンジニアを目指す初心者の方へ:
 * PHPには「拡張機能(extension)」と呼ばれる追加機能があります。
 * mb_strtolower は「mbstring」という拡張機能の一部です。
 * もしこの拡張機能がPHPの設定で有効になっていない場合、mb_strtolower 関数は「未定義 (undefined)」となり、
 * スクリプトがエラーで停止してしまいます。
 * このサンプルでは function_exists() を使って、事前にその関数が利用可能かを確認しています。
 * これにより、環境依存のエラーを防ぐ堅牢なコードになります。
 *
 * @param string $text 変換する文字列。
 * @param string|null $encoding 文字エンコーディング。省略可能(デフォルトは内部エンコーディング)。
 * @return string 小文字に変換された文字列、またはmbstring拡張が無効な場合は元の文字列。
 */
function convertMultiByteStringToLowerCase(string $text, ?string $encoding = null): string
{
    // mb_strtolower 関数が存在するかどうかを確認します。
    // mbstring 拡張がPHPにインストールされ、有効になっている必要があります。
    if (function_exists('mb_strtolower')) {
        // 関数が存在する場合、mb_strtolower を使用して文字列を小文字に変換します。
        // エンコーディングが指定されていない場合は、PHPの内部エンコーディングが使用されます。
        return mb_strtolower($text, $encoding);
    } else {
        // mb_strtolower 関数が存在しない場合(mbstring拡張が無効な場合)、
        // 開発者やシステム管理者に警告を通知するため、エラーログにメッセージを出力します。
        // この状況ではマルチバイト文字を正確に小文字に変換できないため、
        // 処理を安全に進めるために元の文字列をそのまま返します。
        // もしASCII文字のみを扱うことが確実な場合は、strtolower() を代替として使用することも可能ですが、
        // マルチバイト文字では正しく機能しないため注意が必要です。
        error_log("Warning: mb_strtolower function is not available. Please ensure the mbstring extension is enabled in your PHP configuration.");

        return $text; // mbstring拡張がない場合は元の文字列を返す
    }
}

// サンプル使用例
$originalString1 = "HELLO world! 日本語テスト";
$originalString2 = "PHP Is A GREAT Language.";
$originalString3 = "UTF-8の文字列を変換";

echo "元の文字列 1: " . $originalString1 . PHP_EOL;
echo "変換後 1: " . convertMultiByteStringToLowerCase($originalString1) . PHP_EOL . PHP_EOL;

echo "元の文字列 2: " . $originalString2 . PHP_EOL;
echo "変換後 2: " . convertMultiByteStringToLowerCase($originalString2) . PHP_EOL . PHP_EOL;

// エンコーディングを指定する例
echo "元の文字列 3: " . $originalString3 . PHP_EOL;
echo "変換後 3 (UTF-8指定): " . convertMultiByteStringToLowerCase($originalString3, 'UTF-8') . PHP_EOL;

// このコードは、PHP環境でmbstring拡張が有効であれば、mb_strtolower を正常に利用します。
// もしmbstring拡張が無効な環境で実行した場合、error_log() のメッセージが出力され、
// 変換後の文字列は元の文字列と同一になります。
?>

PHPのmb_strtolower関数は、日本語のようなマルチバイト文字を含む文字列を小文字に変換するために利用されます。通常のstrtolower関数がASCII文字にしか対応しないのに対し、mb_strtolowerはより幅広い文字セットに対応するため、特に多言語環境で重要です。この関数は、PHPの「mbstring」という拡張機能の一部として提供されています。

システムエンジニアを目指す方にとって、拡張機能の管理は重要です。もしPHPの設定でmbstring拡張が有効になっていない場合、mb_strtolower関数を直接呼び出すと「Undefined function」(未定義の関数)エラーが発生し、プログラムが停止してしまいます。これを防ぐため、サンプルコードではfunction_exists('mb_strtolower')を使って、関数が利用可能かを事前に確認しています。

mb_strtolower関数は、変換したい文字列を最初の引数$stringに指定します。オプションとして二つ目の引数$encodingで文字エンコーディングを指定でき、省略した場合はPHPの内部エンコーディングが適用されます。戻り値としては、小文字に変換された新しい文字列が返されます。ただし、もしmbstring拡張が利用できない環境では、エラーを防ぐために元の文字列がそのまま返されるようにサンプルコードは実装されています。このように、事前に利用可能性をチェックする手法は、異なる実行環境でも安定して動作する堅牢なコードを書く上で非常に役立ちます。

mb_strtolower関数はPHPのmbstring拡張機能が有効な環境でのみ利用可能です。この拡張機能が有効でない場合、関数は「未定義(undefined)」として扱われ、スクリプトがエラーで停止してしまうため注意が必要です。サンプルコードのようにfunction_exists()で事前に関数の存在を確認し、もし存在しない場合にはエラーログを出力したり、元の文字列を返したりするなど、代替処理を用意することが安全なコーディングの基本となります。通常のstrtolower()関数ではマルチバイト文字(日本語など)を正しく小文字に変換できません。そのため、マルチバイト文字列を扱う際にはmb_strtolowerの利用とmbstring拡張機能の有効化が不可欠です。また、引数で変換対象文字列の適切なエンコーディングを指定することで、文字化けを防ぎ、より正確な処理が実現できます。

PHP mb_strtolowerでUTF-8文字列を小文字変換する

<?php

/**
 * PHPのmb_strtolower関数を使用して、多バイト文字を含む文字列を
 * 正しく小文字に変換するサンプルコードです。
 * UTF-8エンコーディングを明示的に指定しています。
 */
function convertMultiByteStringToLowerCase(string $inputString, string $encoding = 'UTF-8'): string
{
    // mb_strtolower関数は、指定されたエンコーディングに基づいて文字列を小文字に変換します。
    // 第2引数で'UTF-8'を明示的に指定することで、
    // 日本語やその他の多バイト文字が正しく処理されることを保証します。
    return mb_strtolower($inputString, $encoding);
}

// 変換したい多バイト文字列を定義します。
// 日本語、ウムラウト文字、記号など、さまざまな文字を含んでいます。
$originalString = "こんにちは、世界! PHP は 素晴らしい言語です。 ÄÖÜäöü ABC-XYZ";

// 定義した関数を使用して文字列を小文字に変換します。
$lowercaseString = convertMultiByteStringToLowerCase($originalString, 'UTF-8');

// 元の文字列と変換後の文字列を出力し、結果を確認します。
echo "元の文字列: " . $originalString . "\n";
echo "小文字に変換された文字列 (UTF-8): " . $lowercaseString . "\n";

?>

このサンプルコードは、PHPのmb_strtolower関数を用いて、日本語や記号など多バイト文字を含む文字列を正しく小文字に変換する方法を示しています。システムエンジニアにとって、多言語対応のアプリケーション開発では、文字エンコーディングを考慮した文字列処理が非常に重要となります。

mb_strtolower関数は、指定されたエンコーディングに基づいて文字列全体を小文字に変換する機能を提供します。その引数は二つあります。一つ目の引数$stringには、小文字に変換したい元の文字列を渡します。二つ目の引数$encodingはオプションで、文字列のエンコーディングを指定します。このサンプルコードでは、日本語やドイツ語のウムラウト文字などが含まれる多バイト文字を適切に処理するため、UTF-8を明示的に指定しています。これにより、PHPの通常のstrtolower関数では正しく処理できない多バイト文字も、期待通りに小文字に変換されます。この関数は、変換後の小文字文字列を戻り値として返します。

コード内では、convertMultiByteStringToLowerCaseという関数が定義されており、この中でmb_strtolowerを呼び出しています。具体的には、「こんにちは、世界! PHP は 素晴らしい言語です。 ÄÖÜäöü ABC-XYZ」という多バイト文字を含む文字列をUTF-8エンコーディングで小文字に変換しています。最終的に、元の文字列と変換後の小文字文字列が画面に出力され、mb_strtolowerが多バイト文字にも正確に対応していることを確認できます。この関数は、国際的なアプリケーション開発において、文字列処理の堅牢性を高める上で不可欠なツールです。

PHPのmb_strtolower関数は、日本語や絵文字などの多バイト文字を含む文字列を小文字に変換する際に必須です。通常のstrtolower関数ではASCII文字しか正しく処理できず、多バイト文字に対しては文字化けや意図しない結果となるため、必ずmb_strtolowerを使用してください。

特に重要なのは、第2引数で文字列のエンコーディングを明示的に指定することです。サンプルコードのように'UTF-8'と指定することで、システム全体のエンコーディング設定に依存せず、常に期待通りの変換結果を得られます。このエンコーディング指定を誤ると、文字が正しく変換されなかったり、文字化けが発生したりする原因となりますので、文字列の実際のエンコーディングと一致させることが安全に利用するためのポイントです。

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