PHPのgrapheme_strlen()関数とは?書記素単位で文字列の長さを取得する方法
書記素(グラフェム)とは
書記素(グラフェム)とは、書記体系における最小の機能単位のことです。音に対応する文字として表現できる、書き言葉の最小単位と考えることができます。
たとえば、「é」のようなアクセント付き文字は、内部的には「e」と発音符の組み合わせとして扱われることがありますが、書記素としては1つの単位として数えられます。このようなマルチバイト文字や結合文字を正しく処理するために、PHPでは専用の関数が用意されています。
grapheme_strlen()関数の概要
PHPのgrapheme_strlen()関数は、文字列の長さを書記素単位で取得するために使用されます。バイト数やコードポイント数ではなく、人間が認識する「文字」としての長さを返す点が特徴です。
この関数はPHP 5.3.0以降のバージョンで利用可能であり、intl拡張モジュールが必要です。
構文
int grapheme_strlen(string $string)
パラメータ
grapheme_strlen()関数が受け取るパラメータは以下の1つだけです。
$string − 長さを測定したい対象の文字列です。このパラメータにはUTF-8エンコーディングされた文字列を指定する必要があります。
戻り値
この関数は、成功した場合に文字列の長さ(書記素単位の整数値)を返します。失敗した場合にはFalseを返します。
使用例
以下の例では、結合文字を含む文字列に対してgrapheme_strlen()関数を使用し、その長さを取得しています。
<?php
// 結合文字を含む文字列 "abca\xCC\x8Ao\xCC\x88a\xCC\x8A" の
// 長さを取得します
$integer = grapheme_strlen("abca\xCC\x8Ao\xCC\x88a\xCC\x8A\x122");
// 結果を出力
var_dump($integer);
?>出力結果
int(8)
この例では、見た目上の文字数が8文字としてカウントされています。結合文字(ダイアクリティカルマーク)が個別の文字としてではなく、元の文字と一体となった1つの書記素として正しく処理されていることがわかります。
まとめ
grapheme_strlen()関数は、日本語の濁点付き仮名や欧米言語のアクセント付き文字など、複数のコードポイントから構成される文字を正しく1文字として数えたい場合に非常に有用です。strlen()やmb_strlen()との違いを理解し、用途に応じて適切な関数を選択しましょう。
-
PHPのquoted_printable_encode()関数の使い方を徹底解説
PHPのquoted_printable_encode()関数は、8ビット文字列をquoted-printable形式の文字列に変換するための組み込み関数です。quoted-printableはMIME(Multipurpose Internet Mail Extensions)で定義されているエンコード方式の一つで、主に電子メールで非ASCII文字(日本語など)を安全に送信する際に利用されます。構文quoted_printable_encode(str)パラメータstr − 変換対象となる8ビット文字列を指定します。この引数は必須です。戻り値quoted_printable_encode()
-
PHPのquoted_printable_decode()関数とは?使い方とサンプルコードを解説
PHPのquoted_printable_decode()関数は、quoted-printable形式でエンコードされた文字列を、8ビット文字列にデコードするために使用されます。メール本文などで使われるquoted-printableエンコーディングを元に戻したい場合に便利な関数です。 構文 quoted_printable_decode(str) パラメータ str − デコード対象となる入力文字列を指定します。 戻り値 quoted_printable_decode()関数は、デコード後の8ビットASCII文字列を返します。 使用例 以下は、quoted_printable_dec