ステート マシンに基づいて (HTML) パーサーを作成したいのですが、実際に入力を読み取ったり使用したりする方法に疑問があります。入力全体を 1 つの文字列にロードし、それを配列と同様に操作し、そのインデックスを現在の解析位置として保持することにしました。
シングルバイト エンコーディングでは問題はありませんが、マルチバイト エンコーディングでは、各値は文字ではなく文字のバイトを表します。
例:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
出力:
Ĺ
ž
Ĺ
Ą
これは、ループ内の文字列を繰り返し処理して単一の文字をチェックできないことを意味します。文字の途中にいるかどうかわからないためです。
質問は次のとおりです。
- パフォーマンスに適した方法で、文字列から単一の文字をマルチバイトセーフで読み取るにはどうすればよいですか?
- この場合は配列だったので、文字列を操作することをお勧めしますか?
- 入力の読み方は?