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

作成日: 更新日:

mb_convert_case関数は、マルチバイト文字列、つまり日本語のような全角文字を含む文字列の文字種(大文字、小文字、単語の先頭文字など)を変換する関数です。この関数は、指定された文字列を、指定された変換モードに従って新しい文字列として返します。

PHPには、strtolower()strtoupper()といった文字種を変換する標準関数がありますが、これらは主に半角英数字(シングルバイト文字)のために設計されています。そのため、日本語のようなマルチバイト文字を含む文字列に対してこれらの関数を使用すると、正しく変換されなかったり、文字化けの原因になったりする場合があります。

mb_convert_case関数は、このような問題を解決し、マルチバイト文字列であっても正確に文字種を変換できるようにするために提供されています。この関数を使用する際には、変換したい文字列、変換のモード(例えば、MB_CASE_UPPERで全て大文字に、MB_CASE_LOWERで全て小文字に、MB_CASE_TITLEで各単語の先頭のみを大文字にするなど)、そして必要に応じて文字エンコーディングを指定します。

国際的なシステムや、日本語など様々な言語のデータを扱うウェブアプリケーションを開発する際に、ユーザー入力の統一や表示形式の調整、データの正規化といった目的で非常に重要な役割を果たします。これにより、多言語環境下での文字列処理を安全かつ信頼性高く行い、文字化けや意図しない変換を防ぐことができます。

基本的な使い方

構文(syntax)

<?php
$string = "hello world";
$convertedString = mb_convert_case($string, MB_CASE_UPPER, "UTF-8");
echo $convertedString;
?>

引数(parameters)

string $string, int $mode, ?string $encoding = null

  • string $string: 変換したい文字列
  • int $mode: 変換モードを指定する整数。以下の定数を使用します:
    • MB_CASE_UPPER: 全て大文字に変換します。
    • MB_CASE_LOWER: 全て小文字に変換します。
    • MB_CASE_TITLE: 各単語の先頭を大文字に変換します。
    • MB_CASE_FOLD: 文字種を区別せずに変換します (例: 小文字と大文字を同じにする)。
    • MB_CASE_UPPER_CASE: 全て大文字に変換します (MB_CASE_UPPER と同等)。
    • MB_CASE_LOWER_CASE: 全て小文字に変換します (MB_CASE_LOWER と同等)。
    • MB_CASE_TITLE_CASE: 各単語の先頭を大文字に変換します (MB_CASE_TITLE と同等)。
  • ?string $encoding = null: 文字エンコーディングを指定する文字列。省略された場合、内部エンコーディングが使用されます。

戻り値(return)

string

指定された文字列を指定された変換種別(大文字、小文字、タイトルケースなど)に変換した新しい文字列を返します。

サンプルコード

PHP mb_convert_case による文字種変換

<?php

/**
 * mb_convert_case 関数の基本的な使用方法を示すサンプルコード。
 * 文字列の文字種(大文字、小文字、タイトルケースなど)を変換します。
 *
 * @param string $text 変換する文字列。
 * @param string $encoding 使用する文字エンコーディング。デフォルトは現在の内部エンコーディング。
 * @return void
 */
function demonstrateMbConvertCase(string $text, string $encoding = 'UTF-8'): void
{
    echo "元の文字列 ({$encoding}): " . $text . PHP_EOL;

    // MB_CASE_UPPER: 全て大文字に変換
    echo "全て大文字 (MB_CASE_UPPER): " . mb_convert_case($text, MB_CASE_UPPER, $encoding) . PHP_EOL;

    // MB_CASE_LOWER: 全て小文字に変換
    echo "全て小文字 (MB_CASE_LOWER): " . mb_convert_case($text, MB_CASE_LOWER, $encoding) . PHP_EOL;

    // MB_CASE_TITLE: 各単語の先頭を大文字に変換 (タイトルケース)
    echo "タイトルケース (MB_CASE_TITLE): " . mb_convert_case($text, MB_CASE_TITLE, $encoding) . PHP_EOL;

    // PHP 7.3 以降で利用可能な MB_CASE_FOLD: 大文字を小文字に折りたたむ(ロケールに依存しない小文字化)
    // echo "ケースフォールド (MB_CASE_FOLD): " . mb_convert_case($text, MB_CASE_FOLD, $encoding) . PHP_EOL;
}

// 実行例
$englishString = 'hello world! This Is A Test String.';
$japaneseString = 'こんにちは世界!phpのテストです。';

echo "--- 英語文字列の変換 ---" . PHP_EOL;
demonstrateMbConvertCase($englishString);
echo PHP_EOL;

echo "--- 日本語文字列の変換 ---" . PHP_EOL;
// 日本語のようなマルチバイト文字の場合、大文字/小文字の区別がないため、
// mb_convert_case の UPPER/LOWER/TITLE は視覚的な変化を示さないことがあります。
// しかし、内部的にはUnicodeの規則に基づき処理されます。
demonstrateMbConvertCase($japaneseString);

PHP 8.4のmb_convert_case関数は、マルチバイト文字を含む文字列の文字種(大文字、小文字、タイトルケースなど)を変換するために使用されます。

この関数は、第1引数に変換したいstring型の文字列を受け取ります。第2引数のint型の$modeには、MB_CASE_UPPERで全て大文字に、MB_CASE_LOWERで全て小文字に、MB_CASE_TITLEで各単語の先頭を大文字にするなど、変換の形式を指定する定数を渡します。第3引数の?string $encodingはオプションで、使用する文字エンコーディングを指定します。この引数を省略した場合、PHPの内部エンコーディングが適用されます。関数は変換された新しいstring型の文字列を戻り値として返します。

サンプルコードでは、demonstrateMbConvertCase関数を通して、英語と日本語の文字列に対してmb_convert_caseがどのように適用されるかを示しています。たとえば、英語の'hello world!''HELLO WORLD!''Hello World!'に変換される様子が確認できます。日本語のようなマルチバイト文字の場合、大文字・小文字の区別がないことが多いため、MB_CASE_UPPERMB_CASE_LOWERを使用しても視覚的な変化がないことがありますが、内部的にはUnicodeの規則に基づいた処理が行われます。この関数は、ユーザー入力の整形や表示形式の統一など、さまざまな場面で活用できます。

mb_convert_caseは、日本語のようなマルチバイト文字の文字種(大文字・小文字・タイトルケースなど)を正しく変換するために利用する関数です。特に重要なのは、第3引数で文字エンコーディングを正確に指定することです。これを怠ったり誤ったりすると、文字化けや意図しない結果につながりますので、UTF-8など実際に使用するエンコーディングを常に明示的に指定してください。日本語のような大文字・小文字の区別がない文字に対しては、MB_CASE_UPPERなどを指定しても見た目の変化がないことがありますが、内部的にはUnicodeの規則に基づき処理されています。また、この関数はmb_convert_encodingとは異なり、文字エンコーディングそのものを変換するのではなく、文字の種別を変換するものですので混同しないよう注意が必要です。

PHP mb_convert_kanaでの文字種変換

<?php

// mbstring 拡張がロードされていることを確認
// 日本語文字列処理には必須です。
if (!extension_loaded('mbstring')) {
    echo "エラー: mbstring 拡張がロードされていません。php.ini の設定を確認してください。" . PHP_EOL;
    exit(1);
}

// 内部エンコーディングをUTF-8に設定(推奨)
// mb_convert_kana は、デフォルトで mb_internal_encoding() で設定されたエンコーディングを使用します。
mb_internal_encoding('UTF-8');

/**
 * mb_convert_kana 関数を使用して、日本語文字列の様々な文字種・文字幅変換の例を示します。
 *
 * @param string $inputString 変換対象の日本語文字列
 * @return void
 */
function showKanaConversions(string $inputString): void
{
    echo "--- 元の文字列: " . $inputString . " ---" . PHP_EOL;

    // 全角カタカナを全角ひらがなに変換 ('H'モード)
    // 例: 「ハローワールド」 → 「はろーわーるど」
    $hiragana = mb_convert_kana($inputString, 'H', 'UTF-8');
    echo "全角カタカナ → 全角ひらがな: " . $hiragana . PHP_EOL;

    // 全角ひらがなを半角カタカナに変換 ('k'モード)
    // 例: 「てすとプログラム」 → 「テストプログラム」
    $halfwidthKatakana = mb_convert_kana($inputString, 'k', 'UTF-8');
    echo "全角ひらがな → 半角カタカナ: " . $halfwidthKatakana . PHP_EOL;

    // 全角英数字と全角スペースを半角に変換 ('as'モード)
    // 例: 「PHP 8.4」 → 「PHP 8.4」
    $halfwidthAlphanum = mb_convert_kana($inputString, 'as', 'UTF-8');
    echo "全角英数字・スペース → 半角: " . $halfwidthAlphanum . PHP_EOL;

    // 半角カタカナを全角カタカナに変換 ('K'モード)
    // 例として、半角カタカナの文字列を直接渡します。
    // 「テストプログラム」 → 「テストプログラム」
    $fullwidthKatakana = mb_convert_kana("テストプログラム", 'K', 'UTF-8');
    echo "半角カタカナ → 全角カタカナ: " . $fullwidthKatakana . PHP_EOL;

    // 半角英数字と半角スペースを全角に変換 ('AS'モード)
    // 例として、半角英数字の文字列を直接渡します。
    // 「PHP 8.4 is great!」 → 「PHP 8.4 is great!」
    $fullwidthAlphanum = mb_convert_kana("PHP 8.4 is great!", 'AS', 'UTF-8');
    echo "半角英数字・スペース → 全角: " . $fullwidthAlphanum . PHP_EOL;

    echo PHP_EOL;
}

// さまざまな変換パターンを試すためのサンプル実行
showKanaConversions("ハローワールド!PHP");
showKanaConversions("てすとプログラムです123");
showKanaConversions("PHP 8.4 サンプル");
showKanaConversions("これはテストです。");

PHPのmb_convert_kana関数は、日本語のひらがな、カタカナ、全角英数字、半角英数字といった文字種や文字幅を相互に変換するために使用される重要な関数です。この関数を正確に利用するためには、まずPHPのmbstring拡張がシステムにロードされていることを確認することが不可欠です。mbstring拡張は、日本語のようなマルチバイト文字を適切に処理するために必要だからです。また、mb_internal_encoding関数を使って内部エンコーディングをUTF-8などの適切な値に設定しておくと、文字化けを防ぎ、一貫した処理が期待できます。

mb_convert_kana関数は、三つの引数を取ります。最初のstring $stringは変換したい対象の文字列、次のstring $modeは変換のルールを指定する一文字または複数の文字(例えば「H」で全角カタカナを全角ひらがなへ、「k」で全角ひらがなを半角カタカナへ、など)を指定します。最後の?string $encodingは文字列のエンコーディングを指定するオプションの引数で、省略した場合はmb_internal_encodingで設定された内部エンコーディングが使われます。この関数は、変換が適用された新しい文字列を戻り値として返します。

サンプルコードでは、showKanaConversions関数を通じて、さまざまな変換モードの具体的な挙動が示されています。例えば、全角カタカナを全角ひらがなへ変換したり、全角の英数字やスペースを半角へ変換したり、あるいはその逆の変換を行ったりする例を確認できます。これにより、日本語の文字列データを多様な形式に整形する際の柔軟な対応が可能となります。

mb_convert_kana関数は、日本語の文字種や文字幅を変換する際に利用する重要な関数です。この関数を使うためには、まずPHPのmbstring拡張が有効になっていることを確認してください。もしロードされていない場合、php.iniの設定を見直す必要があります。

次に、文字化けを防ぎ、意図した通りに変換を行うために、事前にmb_internal_encoding()関数を使って内部エンコーディングをUTF-8に設定することを強く推奨します。mb_convert_kana関数は、第二引数に指定する「モード」によって、全角ひらがなから半角カタカナ、全角英数字から半角、その逆など、多岐にわたる変換パターンを実現できます。複数のモードを組み合わせて指定することも可能です。

変換対象の文字列のエンコーディングが不明確な場合や、内部エンコーディングと異なる可能性がある場合は、第三引数で明示的にエンコーディングを指定すると、より安全に処理できます。

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