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

mb_ord関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

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

構文(syntax)

1mb_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コードポイントを取得する

1<?php
2
3/**
4 * 文字列の最初の文字の Unicode コードポイントを返します。
5 * エンコーディングを指定しない場合は、内部エンコーディングを使用します。
6 *
7 * @param string $string 対象の文字列
8 * @param string|null $encoding 文字エンコーディング (オプション)
9 * @return int|false Unicode コードポイント (成功時) または false (失敗時)
10 */
11function getUnicodeCodePoint(string $string, ?string $encoding = null): int|false
12{
13    // エンコーディングが指定されていない場合は、内部エンコーディングを使用します。
14    if ($encoding === null) {
15        $encoding = mb_internal_encoding();
16    }
17
18    // 文字列が空の場合、falseを返します。
19    if (empty($string)) {
20        return false;
21    }
22
23    // mb_ordを使用してUnicodeコードポイントを取得します。
24    return mb_ord($string, $encoding);
25}
26
27// 使用例
28$string = "こんにちは";
29$encoding = "UTF-8";
30
31$codePoint = getUnicodeCodePoint($string, $encoding);
32
33if ($codePoint !== false) {
34    echo "文字列 '" . $string . "' の最初の文字の Unicode コードポイントは " . $codePoint . " です。\n";
35} else {
36    echo "Unicode コードポイントの取得に失敗しました。\n";
37}
38
39$string = "A";
40$codePoint = getUnicodeCodePoint($string);
41
42if ($codePoint !== false) {
43    echo "文字列 '" . $string . "' の最初の文字の Unicode コードポイントは " . $codePoint . " です。\n";
44} else {
45    echo "Unicode コードポイントの取得に失敗しました。\n";
46}

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関数の方が高速な場合があります。

関連コンテンツ