Я хотел бы написать парсер (HTML) на основе конечного автомата, но у меня есть сомнения в том, как читать/использовать ввод данных. Я решил загрузить весь ввод в одну строку, а затем работать с ним, как с массивом, и удерживать свой индекс как текущую позицию синтаксического анализа.
Не было бы проблем с однобайтовым кодированием, но в многобайтовой кодировке каждое значение не представляет символ, а байта символа.
Пример:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Выходы:
Ĺ
ž
Ĺ
Ą
Это означает, что я не могу перебирать строку в цикле, чтобы проверять отдельные символы, потому что я никогда не знаю, находится ли я в середине символа или нет.
Итак, вопросы:
- Как многобайтовое безопасное чтение одиночный символ из строки в удобный способ?
- Хорошо ли работать с string, поскольку это был массив в этом случай?
- Как бы вы прочитали ввод?