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

作成日: 更新日:

mb_language関数は、PHPのマルチバイト文字列関数で使用する言語を設定、または取得する関数です。この関数を使用することで、スクリプトが扱う文字列の言語環境を明示的に指定できます。特に、複数の言語を扱うアプリケーションや、異なる言語設定の環境で動作するアプリケーションにおいて、文字エンコーディングや文字の処理を正しく行うために重要です。

引数を指定せずにこの関数をコールした場合、現在の言語設定を返します。引数に文字列を指定した場合、その文字列を新しい言語設定として設定し、成功すればtrue、失敗すればfalseを返します。設定できる言語はPHPがサポートしているものに限られます。

この関数の利用シーンとしては、例えば、入力フォームから送信されたデータを処理する際に、特定の言語に合わせて文字エンコーディングを変換したり、データベースに保存する際に言語に適した文字コードを使用したりする場合などが挙げられます。また、ウェブサイトの表示言語をユーザーのブラウザ設定や選択に基づいて切り替える際にも、mb_language関数を使用して適切な言語を設定することで、文字化けなどの問題を回避できます。

言語設定は、mb_detect_encoding関数などの文字エンコーディング自動判別関数にも影響を与えるため、これらの関数と組み合わせて使用することで、より正確な文字エンコーディングの判別が可能になります。

システムエンジニアを目指す初心者の方は、mb_language関数を理解することで、多言語対応のアプリケーション開発における文字コード問題の解決に役立てることができます。

基本的な使い方

構文(syntax)

mb_language(string $language = null): string|bool

引数(parameters)

?string $language = null

  • string $language = null: 使用する言語を指定する文字列。指定しない場合は、PHPの設定値または環境変数(LC_ALL, LANG)から推測されます。

戻り値(return)

string|bool

mb_language関数は、内部エンコーディングの設定または取得を行います。設定に成功した場合はTRUEを、失敗した場合はFALSEを返します。引数なしで呼び出された場合は、現在の内部エンコーディングの文字列を返します。

サンプルコード

mb_language()のエラーハンドリングを実演する

<?php

declare(strict_types=1);

/**
 * mb_language() 関数のエラーハンドリングを実演します。
 *
 * この関数は、有効な言語と無効な言語を設定しようとした場合の
 * mb_language() の戻り値の違いを示します。
 * サポートされていない無効な言語名を引数に指定すると、
 * この関数は false を返し、これがエラーに相当します。
 */
function demonstrateMbLanguageErrorHandling(): void
{
    // --- 実行前の状態を確認 ---
    // 引数なしで呼び出すと、現在の言語設定を取得できます。
    $initialLanguage = mb_language();
    echo "実行前の言語設定: {$initialLanguage}\n\n";

    // --- 成功ケース: 有効な言語を設定 ---
    echo "1. 有効な言語 'Japanese' を設定します。\n";
    $validLanguage = 'Japanese';
    
    // mb_language() で言語を設定します。成功すると true が返ります。
    $isSuccess = mb_language($validLanguage);

    if ($isSuccess) {
        echo "   -> 成功: 戻り値は true でした。\n";
        // 設定が反映されたか確認します。
        echo "   現在の言語設定: " . mb_language() . "\n\n";
    } else {
        // 通常、有効な言語ではこのブロックは実行されません。
        echo "   -> 予期せぬ失敗: 戻り値は false でした。\n\n";
    }

    // --- エラーケース: 無効な言語を設定 ---
    echo "2. 無効な言語 'invalid-language' を設定します。\n";
    $invalidLanguage = 'invalid-language';
    
    // 無効な言語を指定すると、mb_language() は false を返します。
    $isSuccess = mb_language($invalidLanguage);

    if ($isSuccess === false) {
        echo "   -> エラー: 戻り値は false でした。言語設定に失敗しました。\n";
        // エラーが発生した場合、言語設定は変更されないことを確認します。
        echo "   現在の言語設定は変更されていません: " . mb_language() . "\n";
    } else {
        // このブロックは実行されません。
        echo "   -> 予期せぬ成功: 戻り値は true でした。\n";
    }
}

// デモ関数を実行します。
demonstrateMbLanguageErrorHandling();

このPHPコードは、mb_language関数を使用してマルチバイト文字列処理の言語を設定、または取得する方法を示しています。特に、言語設定に失敗した場合のエラーハンドリングに焦点を当てています。

mb_language関数は、引数の有無によって動作が変わります。引数を指定せずに呼び出すと、現在設定されている言語名を文字列として返します。一方、引数に'Japanese'のような有効な言語名を文字列として渡すと、その言語への設定を試み、成功した場合はtrueを返します。

このサンプルの重要な点は、サポートされていない無効な言語名(例: 'invalid-language')を引数に指定した場合の動作です。このとき、言語設定は行われず、関数は戻り値としてfalseを返します。このように、戻り値がfalseであるかを確認することで、言語設定が失敗したというエラーを検知し、その後の処理を制御することが可能です。コードでは、設定失敗後も元の言語設定が維持されていることを確認しています。

mb_language関数は、引数の有無で役割と戻り値の型が変わる点に注意が必要です。引数なしで呼び出すと現在の言語設定(文字列)を取得し、引数ありの場合は設定の成否(真偽値)を返します。言語設定を行う際は、無効な言語名を指定するとfalseが返るため、必ず戻り値を確認する習慣をつけましょう。エラー判定にはif ($result === false)のように厳密な比較を用いると、より安全で確実です。設定に失敗した場合、以前の言語設定は変更されずに維持されます。指定できる言語名は'Japanese''English'などに限られるため、事前に有効な値を確認することが重要です。

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