(31-10-2012, 09:33 PM)Xenos a écrit : Les crochets délimitent une classe de caractères, et ^ signifie "tout sauf..."
donc '/<[^<>]>/' se lit "un < puis n'importe quoi sauf des < ou > puis un >" (enfin, il me semble).
C'est bien ça. Cest une approche simpliste qui devrait marcher dans la plupart des cas. Ensuite il nous faut savoir d'ou proviennent tes chaines pour savoir si éventuellement des '<' et des '>' peuvent se glisser dans les attributs. D'ailleurs, en HTML, sont-ils autorisés dans des attributs ? A priori je dirais que non même si les navigateurs ne devraient pas broncher pour autant.
(31-10-2012, 09:33 PM)Xenos a écrit : Le problème, c'est qu'un tag mal formé pourrait planter ce preg, non (exemple: <tag attribute="bidule>">: le ">" de bidule va être marqué comme fin de balise, non?
idem.
(31-10-2012, 09:33 PM)Xenos a écrit : ...
Pour le reste, il y a toujours la possibilité de créer un parser qui "mange" la chaine caractère par caractère, avec un automate (finite state machine):
* S'il est dans le texte il accepte tout, sauf un '<' auquel cas il passe en état balise.
* En état balise, il "mange" d'abord le tag, puis il passe en état liste d'attributs.
* En état liste d'attributs il accepte un ou plusieurs espaces suivis de caractères, et attend =" pour passer en état contenu d'attribut, ou /> ou > pour revenir en état texte
* En état contenu d'attribut il attend un " (sauf si précédé par un \) auquel cas il revient en liste d'attributs
ça fait donc uniquement 4 fonctions a définir. Voilà après il faut traiter la chaine caractère par caractère (en testant les deux prochains caractères pour =" , \" et /> , c'est pas très performant, mais c'est pas grave si la fonctionalité n'est pas utilisée très intensivement.
ça peut être fun a implémenter, l'affaire de 50 minutes.
Tu peux vouloir gérer les valeurs d'attributs entourés de simples quotes au lieu de doubles, dans ce cas il faut te rappeler du caractère d'entrée pour surveiller celui de sortie
Mais bon, il doit bien y avoir un parser HTML en php qui fait déjà tout ça.
Hum bon oublie ce que j'ai dit c'est sur-chiant a implémenter. Je pensais que ce serait fun mais en fait bof.