Вопрос

Я хотел бы написать (HTML) Parser на основе государственного компьютера, но у меня есть сомнения, как укоренить / использовать вход. Я решил загрузить весь ввод в одну строку, а затем работать с ним как с массивом и удерживайте свой индекс в качестве текущей позиции анализа.

Не было бы проблем с однобайтовым кодировкой, но в многобайтовом кодировании каждое значение не представляет символ, а байт символа.

Пример:

$mb_string = 'žščř'; //4 multi-byte characters in UTF-8

for($i=0; $i < 4; $i++)
{
   echo $mb_string[$i], PHP_EOL;
}

Выходы:

Ĺ
ž
Ĺ
Ą

Это означает, что я не могу перейти через строку в цикле, чтобы проверить одно символы, потому что я никогда не знаю, есть ли я в середине персонажа или нет.

Таким образом, вопросы:

  • Как много-байтовую безопасно прочитайте один символ из строки в дружеском стиле?
  • Это хорошая идея работать со строкой, так как это был массив в этом случае?
  • Как бы вы прочитали вход?
Это было полезно?

Решение

http://php.net/mb_string. это то, что вы ищете

  • просто символы mb_substr один за другим
  • не до PHP6
  • Какой вход именно? Обычный путь в целом

Другие советы

mb_internal_encoding("UTF-8");

$mb_string = 'žščř';

$l=mb_strlen($mb_string);

for($i=0;$i<$l;$i++){
    print(mb_substr($mb_string,$i,1)."<br/>");
}

Без использования MDB_RELEDFUNCEUNTS и с многобайтовыми кодированными строками вы можете использовать стандартные функции Sub String, которые читают несколько байтов, используемых для кодирования.

Например, для закодированной (2 байт) utf-8 (2 байта), если вам нужен первый символ из строки

$string = 'žščř'; //4 multi-byte characters in UTF-8

Вы должны получить значения $ String [0] и $ String [1], поэтому вы на самом деле ищите подстроку между индексами 0 и 1 (для первого символа).

Обратите внимание, что $ String [0] или $ String [n] ссылается на первый (или n-й байт многобайтовой строки)

с уважением,

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top