On parcourt simplement le post, caractère par caractère, avant le passage par ta fonction zcode, et on cherche par comparaison de chaîne les ouvertures et fermeture de citation qu'il contient.J'ai pas vraiment commencer, mais le compteur risque d'interdire les citations différentes non?
Un compteur simple calculerait +1 pour chaque ouverture de citation rencontrée, et à la fin on calcule le total obtenu. Et dans ce cas, on aurait un souci car que le post contienne 4 citations à un seul niveau, ou 1 citation à 4 niveaux, on obtiendrait dans les deux cas un total de 4 en fin de parcours.
Si on compte les fermetures (-1 par fermeture), c'est presque pareil. Sauf que le compteur devrait retomber à 0 à la fin, et le total devient donc une information inutile. Il ne faut plus lire le total à la fin mais observer la valeur du compteur en cours de route
Code : Tout sélectionner
$compteur = 0
<citation> +1 $compteur = 1
</citation> -1 $compteur = 0
<citation> +1 $compteur = 1
</citation> -1 $compteur = 0
<citation> +1 $compteur = 1
</citation> -1 $compteur = 0
<citation> +1 $compteur = 1
</citation> -1 $compteur = 0
En revanche si le post contient une citation à 4 niveaux :
Code : Tout sélectionner
$compteur = 0
<citation> +1 $compteur = 1
<citation> +1 $compteur = 2
<citation> +1 $compteur = 3
<citation> +1 $compteur = 4
</citation> -1 $compteur = 3
</citation> -1 $compteur = 2
</citation> -1 $compteur = 1
</citation> -1 $compteur = 0
Une simple boucle (while, for), quelques if() et la fonction stpros ( http://fr.php.net/manual/fr/function.strpos.php ) feraient bien ce job
Tout ça peut aussi se faire en regexp (ce serait même plus court, y'a juste la regexp à faire en fait, et tu as déjà tout le matériel nécessaire pour ça sous les yeux). C'est vraiment comme tu le sens