Je voudrais écrire un analyseur (HTML) basé sur une machine d'état mais j'ai des doutes sur la façon de lire/utiliser une entrée. J'ai décidé de charger l'ensemble de l'entrée dans une chaîne, puis de travailler avec elle comme avec un tableau et de maintenir son index comme position d'analyse courante.Analyser une chaîne multi-octets en PHP
Il n'y aurait pas de problème avec le codage mono-octet, mais dans le codage multi-octets, chaque valeur ne représente pas un caractère, mais un octet d'un caractère.
Exemple:
$mb_string = 'žščř'; //4 multi-byte characters in UTF-8
for($i=0; $i < 4; $i++)
{
echo $mb_string[$i], PHP_EOL;
}
Sorties:
Ĺ
ž
Ĺ
Ą
Cela signifie que je ne peux pas itérer la chaîne dans une boucle pour vérifier des caractères simples, parce que je ne sais jamais si je suis en au milieu d'un personnage ou non.
Ainsi, les questions sont les suivantes:
- Comment lire un seul caractère sécurité I multi-octets d'une chaîne d'une manière amicale performance ?
- Est-ce une bonne idée de travailler avec la chaîne car c'était un tableau dans ce cas ?
- Comment lire l'entrée?
Notez que la section des commentaires pour 'mb_split' il comprend de nombreux exemples de la façon de casser une chaîne multi-octets dans un tableau de caractères - par exemple, http://us2.php.net/manual/fr/function.mb-split.php#80046 – Amber
@Dav I don ' Je pense qu'il a vraiment besoin d'un tableau. –
par entrée Je veux dire le code HTML à analyser. Peut-être qu'il y a une façon absolument différente d'utiliser la chaîne avec une machine d'état qui me manque :-) ...mais le mb_substr semble bien (si je connais le codage de chaîne, ce qui n'est pas si évident) –