31-10-2012, 09:33 PM
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).
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?
Je pense que tu devrais plutôt procéder en deux temps:
dans un premier temps, la chaine "chaine1", celle d'origine, est strippé avec strip_tag pour donner "chaine2", sans balise, et sans les remplacement. Ensuite,k en comparant chaine1 et chaine2, tu peux repérer les endroits où du texte de chaine 1 a disparu, et donc, en déduire s'il y avait un tag à cet endroit (et le cas échéant, tu peux même récupérer le tag d'origine de chaine2). En revanche, le seul oint délicat, c'est que si deux tags se suivent dans la chaine1 (exemple: <b><u>machin</u></b> et du coup chaine2="machin"), il faudra voir si tu veux vraiment détecter les deux tags ou un seul...
donc '/<[^<>]>/' se lit "un < puis n'importe quoi sauf des < ou > puis un >" (enfin, il me semble).
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?
Je pense que tu devrais plutôt procéder en deux temps:
dans un premier temps, la chaine "chaine1", celle d'origine, est strippé avec strip_tag pour donner "chaine2", sans balise, et sans les remplacement. Ensuite,k en comparant chaine1 et chaine2, tu peux repérer les endroits où du texte de chaine 1 a disparu, et donc, en déduire s'il y avait un tag à cet endroit (et le cas échéant, tu peux même récupérer le tag d'origine de chaine2). En revanche, le seul oint délicat, c'est que si deux tags se suivent dans la chaine1 (exemple: <b><u>machin</u></b> et du coup chaine2="machin"), il faudra voir si tu veux vraiment détecter les deux tags ou un seul...