我想编写一个基于状态机的(HTML)解析器,但我怀疑如何实际读取/使用输入。我决定将整个输入加载到一个字符串中,然后像处理数组一样使用它,并将其索引作为当前解析位置。
单字节编码不会有问题,但在多字节编码中,每个值不代表一个字符,而是一个字符的一个字节。
例子:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
输出:
Ĺ
ž
Ĺ
Ą
这意味着我不能在循环中遍历字符串来检查单个字符,因为我永远不知道我是否在一个字符的中间。
所以问题是:
- 如何以性能友好的方式多字节安全地从字符串中读取单个字符?
- 在这种情况下,使用字符串是一个数组是个好主意吗?
- 你将如何阅读输入?