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