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

作成日: 更新日:

mb_ord関数は、指定されたマルチバイト文字列の最初の文字に対応するUnicodeコードポイントを整数値として返す関数です。PHP 4.0.6以降で使用可能です。この関数は、マルチバイト文字列を扱う際に、その文字の数値的な表現を取得するために利用されます。通常、文字列のエンコーディングは内部エンコーディングまたは mb_internal_encoding() で指定されたエンコーディングに従いますが、オプションの encoding パラメータで明示的に指定することも可能です。encoding パラメータが省略された場合、内部エンコーディングが使用されます。もし、指定された文字列が空である場合、この関数はfalseを返します。mb_ord関数は、文字列の先頭文字のみを対象とし、文字列全体を処理するわけではないことに注意が必要です。例えば、文字列 "あいうえお" の最初の文字 "あ" のUnicodeコードポイントを取得する場合などに使用します。この関数を利用することで、マルチバイト文字の比較や文字コードに基づいた処理を実装することが可能になります。システムエンジニアが文字列処理を行う際、特に多言語対応が必要なシステム開発においては、文字コードを意識したプログラミングが重要であり、mb_ord関数はそのような場面で役立ちます。

基本的な使い方

構文(syntax)

mb_ord(string $string, string $encoding = mb_internal_encoding()): int|false

引数(parameters)

string $string, ?string $encoding = null

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

戻り値(return)

int|false

指定された文字のUnicodeコードポイントを整数で返します。文字がマルチバイト文字として無効な場合はfalseを返します。

サンプルコード

PHP mb_ordで文字のUnicodeコードポイントを取得する

<?php

/**
 * 文字列の最初の文字の Unicode コードポイントを返します。
 * エンコーディングを指定しない場合は、内部エンコーディングを使用します。
 *
 * @param string $string 対象の文字列
 * @param string|null $encoding 文字エンコーディング (オプション)
 * @return int|false Unicode コードポイント (成功時) または false (失敗時)
 */
function getUnicodeCodePoint(string $string, ?string $encoding = null): int|false
{
    // エンコーディングが指定されていない場合は、内部エンコーディングを使用します。
    if ($encoding === null) {
        $encoding = mb_internal_encoding();
    }

    // 文字列が空の場合、falseを返します。
    if (empty($string)) {
        return false;
    }

    // mb_ordを使用してUnicodeコードポイントを取得します。
    return mb_ord($string, $encoding);
}

// 使用例
$string = "こんにちは";
$encoding = "UTF-8";

$codePoint = getUnicodeCodePoint($string, $encoding);

if ($codePoint !== false) {
    echo "文字列 '" . $string . "' の最初の文字の Unicode コードポイントは " . $codePoint . " です。\n";
} else {
    echo "Unicode コードポイントの取得に失敗しました。\n";
}

$string = "A";
$codePoint = getUnicodeCodePoint($string);

if ($codePoint !== false) {
    echo "文字列 '" . $string . "' の最初の文字の Unicode コードポイントは " . $codePoint . " です。\n";
} else {
    echo "Unicode コードポイントの取得に失敗しました。\n";
}

mb_ord関数は、文字列の先頭文字に対応するUnicodeコードポイント(数値表現)を返します。PHP 8.4で利用可能です。引数$stringには、Unicodeコードポイントを取得したい文字列を指定します。オプションの引数$encodingには、文字列の文字エンコーディングを指定します。$encodingを省略した場合、内部文字エンコーディングが使用されます。

サンプルコードでは、getUnicodeCodePoint関数を定義し、mb_ord関数の使い方を示しています。getUnicodeCodePoint関数は、文字列とそのエンコーディングを受け取り、mb_ordを使用してUnicodeコードポイントを取得します。エンコーディングが指定されていない場合は、mb_internal_encoding()関数で取得した内部エンコーディングを使用します。文字列が空の場合は、falseを返します。

サンプルコードでは、"こんにちは"という文字列と"A"という文字列に対して、getUnicodeCodePoint関数を呼び出し、それぞれのUnicodeコードポイントを表示しています。"こんにちは"の場合はUTF-8エンコーディングを指定し、"A"の場合はエンコーディングを省略して内部エンコーディングを使用しています。mb_ord関数が成功するとUnicodeコードポイントが整数値で返され、失敗するとfalseが返されます。

mb_ord関数は、文字列の先頭文字のUnicodeコードポイントを返します。エンコーディングを指定しない場合、PHPの内部エンコーディングが使用されます。異なるエンコーディングの文字列を扱う場合は、$encoding引数で明示的に指定することが重要です。エンコーディングが不明な場合は、mb_detect_encoding関数で判別を試みることができます。文字列が空の場合や、指定したエンコーディングで文字が正しく解釈できない場合はfalseが返されるため、戻り値がfalseでないことを確認してからコードポイントを使用してください。mb_ord関数はマルチバイト文字を正しく処理できますが、シングルバイト文字の場合はord関数の方が高速な場合があります。

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