Я хотел бы написать парсер (HTML) на основе конечного автомата, но у меня есть сомнения, как читать/использовать ввод данных. Я решил загрузить весь ввод в одну строку, а затем работать с ним, как с массивом, и удерживать свой индекс как текущую позицию синтаксического анализа.Разбор многобайтовой строки в PHP
Не было проблем с однобайтовой кодировкой, но в многобайтовой кодировке каждое значение не представляет символ, а байт символа.
Пример:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Выходы:
Ĺ
ž
Ĺ
Ą
Это означает, что я не могу перебирать строки в цикле для проверки отдельных символов, потому что я никогда не знаю, если я нахожусь в в середине персонажа или нет.
Так вопросы:
- Как многобайтные читать один символ из строки в производительности приятельски?
- Это хорошая идея работать с строкой , поскольку это был массив в этом корпусе?
- Как вы прочтете ввод?
Обратите внимание, что раздел комментариев для 'mb_split' есть много примеров того, как разбить многобайтную строку на массив символов - например, http://us2.php.net/manual/en/function.mb-split.php#80046 – Amber
@ Dav Я не знаю, Думаю, ему действительно нужен массив. –
от ввода Я имею в виду HTML-код для синтаксического анализа. Может быть, есть совершенно другой способ использования строки с конечным автоматом, который мне не хватает :-) ...но mb_substr выглядит хорошо (если я знаю строчную кодировку, что не так очевидно) –