PHPのmb_chr()関数でUnicodeコードポイントから文字を取得する方法を徹底解説
PHPには、Unicodeコードポイント値から対応する文字を取得できるmb_chr()関数が用意されています。この関数は、指定された文字エンコーディングでエンコードされた文字列を返します。マルチバイト文字を扱う際に非常に便利な関数なので、ぜひ使い方をマスターしておきましょう。
mb_chr()関数の基本構文
string mb_chr(int $codepoint, string $encoding)
パラメータの説明
mb_chr()関数が受け付けるパラメータは、以下の2つです。
$codepoint − 変換対象となるUnicodeコードポイントの値を指定します。例えば、U+1F418(ゾウの絵文字🐘)に対応する値は「128024」です。
$encoding − 文字エンコーディングを指定します。このパラメータを省略した場合、またはnullを指定した場合は、内部文字エンコーディングが自動的に使用されます。
戻り値
指定されたエンコーディングで文字を表現できる場合は、その文字を含む文字列が返されます。表現できない場合や変換に失敗した場合は、falseが返されます。
補足: PHP 8.0以降では、$encodingパラメータにnullを許容する(nullableな)指定が可能になっています。
実装例
実際に、複数のコードポイントをUTF-8とISO-8859-1の2つのエンコーディングで変換してみましょう。
<pre>
<?php
$str = [66, 64, 0x20AC, 128024];
foreach ($str as $str) {
var_dump(mb_chr($str, 'UTF-8'));
var_dump(mb_chr($str, 'ISO-8859-1'));
}
?>
</pre>実行結果
string(1) "B" string(1) "B" string(1) "@" string(1) "@" string(3) "€" bool(false) string(4) "🐘" bool(false)
この実行結果から、以下のことが確認できます。
- コードポイント「66」と「64」は、どちらのエンコーディングでも「B」と「@」に正常に変換されています。
- 「0x20AC」(ユーロ記号€)はUTF-8では変換できますが、ISO-8859-1では対応していないためfalseが返されます。
- ゾウの絵文字「🐘」(コードポイント128024)も、UTF-8では変換できますが、ISO-8859-1では表現できないためfalseとなります。
補足:IntlChar::chr()との使い分け
PHPでは、IntlChar::chr()関数を使用することでも、Unicodeコードポイントから文字への変換が可能です。IntlCharクラスはIntlエクステンション(PECL intl)が必要ですが、より豊富なUnicode関連の機能が利用できる点が特徴です。単純な変換であればmb_chr()、詳細なUnicode操作が必要な場合はIntlChar::chr()というように、用途に応じて使い分けるとよいでしょう。
-
PHPのimagestringup()関数で画像に文字列を垂直に描画する方法
imagestringup()は、PHPのGDライブラリに組み込まれた関数の一つで、画像に対して文字列を垂直方向(下から上へ)に描画するために使用されます。通常の横書きテキストとは異なる縦向きのテキスト表現が必要な場面で活躍する便利な関数です。 構文 bool imagestringup ( $image, $font, $x, $y, $string, $color ) パラメータ imagestringup()関数は、以下の6つのパラメータを受け取ります。 $image − imagecreatetruecolor()関数などで作成した画像リソースを指定します。ここには、指定したサイズの
-
Javaで文字列に特定の文字が含まれているか確認する方法
Javaでは、文字列の中に指定した文字が含まれているかどうかを、いくつかの方法で簡単に確認できます。本記事では、代表的な2つの方法である indexOf() メソッドと toCharArray() メソッドを使った文字検索の手法を、サンプルコード付きでわかりやすく解説します。 indexOf() メソッドを使う方法 Stringクラスの indexOf() メソッドを使うと、文字列の中から特定の文字を検索できます。このメソッドは、引数として渡した文字が文字列内で最初に出現する位置(インデックス)を int 型で返します。もし指定した文字が文字列中に存在しない場合は、-1 を返します。 したがっ