|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
![]() ![]() Inscription : janvier 2003 Messages : 2 018 ![]() |
Bonjour,
J'ai un texte comme celui-ci : Code :
Et je souhaite récupérer le texte contenu entre <div class="dscg"></div> Pour l'instant j'y arrive avec ceci : Code :
Le problème que je rencontre : Si l'utilisateur s'embrouille les pinceaux avec les styles ou les formats (pour ceux qui connaissent FCKEditor ...), il se peut que certaines balises <div> se chevauchent ou soient incohérentes. On peut finalement arriver à un texte comme ceci : Code :
Là, ma Regex ne fonctionne plus correctement. Le but de cette opération : Je précise que le texte devant être extrait sera affiché gratuitement, le texte entier sur abonnement. Afin que l'administrateur saisisse et formate le texte en une seule fois sans avoir à re saisir et reformater dans un autre champ le contenu gratuit, il selectionne la portion de code et lui applique le style "dscg" (ce qui crée en fait les balises <div class="dscg"></div>) Avez vous une soluce pour traiter la récursivité des balises <div> (même en cas de chevauchement) ? Ma regex est-elle correcte ? Merci à tous.
__________________
N1bus Modérateur Web / PHP Aucune demande technique ne sera traitée par MP . Merci PHP/GD : Génération d'un code-barre Code 39 FCKEditor : Modifier la largeur des listes déroulantes PHP/e-Commerce : Installation d'une solution de paiement en ligne SIPS-ATOS |
||||||
|
|
00
|
|
|
#2 | ||||
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Salut
Les regex ne sont pas adaptées à ton problème. Il faudrait presque adopter une approche DOM, mais les regex ne règleront jamais correctement un problème de HTML ou de XML. Exemple : Code :
Code :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
||||
|
|
00
|
|
|
#3 | ||
![]() ![]() Inscription : janvier 2003 Messages : 2 018 ![]() |
Merci Yogui, mais je n'ai pas compris :
Ton code permet juste de détecter le contenu de 3 div maxi ? c'est ça ? Dans le cas qui m'interresse, je dois détecter le premier div qui a la class="dscg" (c'est impératif), et eventuellement inclure les autres div (il peut y en avoir + de 3 : c'est l'utilisateur qui sélectionne le texte ....) Aussi bien, il peut n'y avoir aucun problème, mais ceci n'est pas fiable à 100% J'ai peut-être une autre solution : Insérer une "balise" maison en début et en fin de sélection Code :
Le problème : Je dois faire en sorte que l'administrateur puisse insérer ces balises en 1 clic . il ne doit pas avoir à les écrire lui-même. Le texte délimité doit apparaitre avec un style particulier dans le textarea de FCKEditor afin de le visualiser immédiatement (fond jaune pâle avec bordure tirets gris = le style "dscg") - il faut que je crée une fonction dans FCKEditor avec un nouveau bouton qui fonctionnera un peu comme lorsqu'on met en gras (balise entrante + texte sélectionné + balise fermante). - il faut un deuxieme bouton pour supprimer ces balises , le cas échéant (en cas d'erreur de l'admin) Ainsi avec une simple regex, je pourrai récupérer le contenu entre les balises en m'affranchissant d'éventuelles autres balises standard qui seraient incluses. Note : La solution qui consisterait à recopier le contenu gratuit dans un autre champ n'est pas valable dans la mesure où l'administrateur devrait également mettre en forme le contenu gratuit et le texte entier (FCKEditor nettoie le texte à l'insertion donc un copier coller tu texte mis en forme ne marche pas dans ce cas). Le client veut que ça fonctionne en un clin d'oeil et ne veut pas saisir 2 fois le texte.
__________________
N1bus Modérateur Web / PHP Aucune demande technique ne sera traitée par MP . Merci PHP/GD : Génération d'un code-barre Code 39 FCKEditor : Modifier la largeur des listes déroulantes PHP/e-Commerce : Installation d'une solution de paiement en ligne SIPS-ATOS |
||
|
|
00
|
|
|
#4 |
![]() ![]() Guillaume RossoliniDirecteur technique Inscription : février 2004 Messages : 13 720 ![]() |
Sans utiliser la récursivité (légèrement complexe à maîtriser), les regex te permettent l'un ou l'autre parmi :
Si je ne suis pas assez clair, le plus simple est que tu fasses des essais toi-même à partir de l'exemple ci-dessus. Expliquer avec des mots serait complexe à écrire (pour moi) et pénible à lire (pour toi) :/
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework) Ressources PHP - Ressources Zend Framework |
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : janvier 2003 Messages : 2 018 ![]() |
Ok, je vais regarder ça.
Merci
__________________
N1bus Modérateur Web / PHP Aucune demande technique ne sera traitée par MP . Merci PHP/GD : Génération d'un code-barre Code 39 FCKEditor : Modifier la largeur des listes déroulantes PHP/e-Commerce : Installation d'une solution de paiement en ligne SIPS-ATOS |
|
|
00
|
|
|
#6 | ||
![]() ![]() Inscription : janvier 2003 Messages : 2 018 ![]() |
Bon, j'ai résolu le problème :
Le problème des div imbriqués était causé par un autre "style" qui générait en fait un div (au lieu du span habituel) dans FCKEditor. Cet autre style avait pour fonction d'encadrer une partie de texte sans avoir à le mettre dans un tableau d'1 cellule J'ai remis ce style avec un span et display:block ..... (le span étant par nature display:inline ) Ce qui fait que maintenant, je ne peux plus avoir de div à l'interieur de <div class="dscg"></div>. je n'aurai que des span La regex que j'utilise : Code :
)[EDIT] Bon, j'ai vu FF pour Mac : je l'ai installé sur mon iMac = c'est nickel (ouf !!) par contre IE pour mac c'est fini http://www.microsoft.com/france/mac/ie/default.mspx [/EDIT] Merci à tous.
__________________
N1bus Modérateur Web / PHP Aucune demande technique ne sera traitée par MP . Merci PHP/GD : Génération d'un code-barre Code 39 FCKEditor : Modifier la largeur des listes déroulantes PHP/e-Commerce : Installation d'une solution de paiement en ligne SIPS-ATOS |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com