【PHP】これで分かる関数! – マルチバイトその1 –

PHP

更新履歴

更新日更新者更新内容
2021/8/21JJI・”はじめに”の段落を追加
・サンプルプログラムの実行結果に画面の画像を追加

はじめに

サンプルプログラムの中で次の記事で載せている関数を使用している場合があります。

mb_chr

mb_chr()関数のサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】マルチバイト関数:mb_chr<br>\n";

    // 文字コードの確認、mb_ord()関数を使用する
    $ary_str = ["a", "7", "?", "ハ", "漢"];
    echo_ary_func($ary_str, null, "mb_ord");
    
    // UTF-8の文字コードを10進法で指定する
    $ary_str_code1 = [97, 55, 63, 12495, 28450];
    echo_ary_func($ary_str_code1, null, "mb_chr");

    // UTF-8の文字コードを16進法で指定する
    $ary_str_code2 = [0x61, 0x31, 0x3f, 0x30cf, 0x6f22];
    echo_ary_func($ary_str_code2, "dechex", "mb_chr");

    // 配列の値を引数で指定された関数で出力する
    function echo_ary_func(array $ary, ?string $func1, string $func2) :void {
        $i = 0;

        foreach($ary as $code) {
            if($i !== 0) {
                echo " ";
            }
            if(is_null($func1)) {
                echo ":$code:" . $func2($code) . ":";
            } else {
                echo ":" . $func1($code) . ":" . $func2($code) . ":";
            }
            $i++;
        }
        echo "<br>\n<br>\n";
    }
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_05_01.php<br>
【PHP】マルチバイト関数:mb_chr<br>
:a:97: :7:55: :?:63: :ハ:12495: :漢:28450:<br>
<br>
:97:a: :55:7: :63:?: :12495:ハ: :28450:漢:<br>
<br>
:61:a: :31:1: :3f:?: :30cf:ハ: :6f22:漢:<br>
<br>

mb_convert_encoding

mb_convert_encoding()関数のサンプルプログラムです。
コードの中に書いている「./input/sjis.txt」は、SJISコードのテキストファイルです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】マルチバイト関数:mb_convert_encoding<br>\n";

    // UTF-8の文字配列
    echo '配列:$ary_strをUTF-8→SJISに変換、表示がUTF-8のため、文字化けする' . "<br>\n";
    $ary_str = ["a", "7", "!", "ハ", "漢"];
    $output_strs = mb_convert_encoding($ary_str, "SJIS");
    echo_array1($output_strs);

    // UTF-8の文字列
    echo '文字列:$strをUTF-8→SJISに変換、SJISに変換したため、文字化けする' . "<br>\n";
    $str = "a7!ハ漢";
    $output_str = mb_convert_encoding($str, "SJIS");
    echo ":" . $output_str . ":<br><br>\n";

    // SJISのファイルを読み込み、UTF-8に変換
    echo 'SJISのファイルを読み込み、UTF-8に変換する' . "<br>\n";
    $str = file("./input/sjis.txt", FILE_IGNORE_NEW_LINES);
    $output_strs = mb_convert_encoding($str, "UTF-8", "SJIS");
    echo_array1($output_strs);
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_05_02.php<br>
【PHP】マルチバイト関数:mb_convert_encoding<br>
配列:$ary_strをUTF-8→SJISに変換、表示がUTF-8のため、文字化けする<br>
[0]:a: [1]:7: [2]:!: [3]:�n: [4]:��:<br><br>
文字列:$strをUTF-8→SJISに変換、SJISに変換したため、文字化けする<br>
:a7!�n��:<br><br>
SJISのファイルを読み込み、UTF-8に変換する<br>
[0]:a7!ハ漢:<br><br>

mb_convert_kana

mb_convert_kana()関数のサンプルプログラムです。

<?php
    // 引数の値への厳密な型付け
    declare(strict_types = 1);
    // 共通ライブラリの読み込み
    require_once __DIR__ . "../../../lib/sample_common.php";

    echo "ファイル名:" . basename(__FILE__) . "<br>\n";
    echo "【PHP】マルチバイト関数:mb_convert_kana<br>\n";

    $str1 = "ハロー0123世界ABC+-";
    $str2 = "ハロー0123世界ABC+-";

    // 全角→半角変換
    echo "元の文字列:" . $str1 . ":<br>\n";
    echo "「全角」英字を「半角」に変換:" . mb_convert_kana($str1, "r") . ":<br>\n"; 
    echo "「全角」数字を「半角」に変換:" . mb_convert_kana($str1, "n") . ":<br>\n"; 
    echo "「全角」英数字を「半角」に変換:" . mb_convert_kana($str1, "a") . ":<br>\n"; 
    echo "「全角」カタカナを「半角」に変換:" . mb_convert_kana($str1, "k") . ":<br>\n"; 
    echo "「全角」英数字・カタカナを「半角」に変換:" . mb_convert_kana($str1, "ak") . ":<br>\n"; 
    echo "<br>\n";

    echo "元の文字列:" . $str2 . ":<br>\n";
    echo "「半角」英字を「全角」に変換:" . mb_convert_kana($str2, "R") . ":<br>\n"; 
    echo "「半角」数字を「全角」に変換:" . mb_convert_kana($str2, "N") . ":<br>\n"; 
    echo "「半角」英数字を「全角」に変換:" . mb_convert_kana($str2, "A") . ":<br>\n"; 
    echo "「半角」カタカナを「全角」に変換:" . mb_convert_kana($str2, "K") . ":<br>\n"; 
    echo "「半角」英数字・カタカナを「全角」に変換:" . mb_convert_kana($str1, "AK") . ":<br>\n"; 
?>

実行結果です。

・画面

・HTML

ファイル名:sample02_05_03.php<br>
【PHP】マルチバイト関数:mb_convert_kana<br>
元の文字列:ハロー0123世界ABC+-:<br>
「全角」英字を「半角」に変換:ハロー0123世界ABC+-:<br>
「全角」数字を「半角」に変換:ハロー0123世界ABC+-:<br>
「全角」英数字を「半角」に変換:ハロー0123世界ABC+-:<br>
「全角」カタカナを「半角」に変換:ハロー0123世界ABC+-:<br>
「全角」英数字・カタカナを「半角」に変換:ハロー0123世界ABC+-:<br>
<br>
元の文字列:ハロー0123世界ABC+-:<br>
「半角」英字を「全角」に変換:ハロー0123世界ABC+-:<br>
「半角」数字を「全角」に変換:ハロー0123世界ABC+-:<br>
「半角」英数字を「全角」に変換:ハロー0123世界ABC+-:<br>
「半角」カタカナを「全角」に変換:ハロー0123世界ABC+-:<br>
「半角」英数字・カタカナを「全角」に変換:ハロー0123世界ABC+-:<br>

mb_convert_kana()関数の変換オプションは次のマニュアルを見てください。

PHP: mb_convert_kana - Manual

コメント