Question

Je voudrais écrire un analyseur syntaxique (HTML) basé sur la machine de l'Etat, mais je doute comment lire / utiliser acctually une entrée. J'ai décidé de charger l'ensemble entrée dans une chaîne, puis travailler avec elle comme avec un tableau et maintenir son indice que la position de l'analyse actuelle.

Il n'y aurait aucun problème avec le codage sur un seul 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 un seul caractère, parce que je ne sais jamais si je suis au milieu d'un caractère ou non.

Ainsi, les questions sont les suivantes:

  • Comment lire multi-octets un caractère d'une chaîne dans une performances façon amicale?
  • Est-il bonne idée de travailler avec le chaîne comme il était un tableau dans ce cas?
  • Comment voulez-vous lire l'entrée?
Était-ce utile?

La solution

http://php.net/mb_string est la chose que vous cherchez

  • caractères seulement mb_substr un par un
  • pas avant PHP6
  • quelle entrée exactement? La manière habituelle en général

Autres conseils

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/>");
}

Sans utiliser les mdb_relatedFunctions et avec des chaînes codées multi-octets, vous pouvez utiliser les fonctions standard de chaîne de sous lesquelles on pouvait lire en multiples des octets utilisés pour l'encodage.

Par exemple, pour un UTF-8 chaîne codée (2 octets) si vous avez besoin le premier caractère de la chaîne

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

Vous devez obtenir la chaîne de $ [0] et $ string valeurs [1], de sorte que vous cherchez réellement pour la sous-chaîne entre les indices 0 et 1 (pour le premier caractère).

Notez que $ string [0] ou $ string [N] fera référence à la première (ou N-ième octet de la chaîne multi-octets)

Cordialement,

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top