[RESOLU] regexp pour modifier html

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2014, 13:47

Bonjour à tous,

J'ai besoin d'aide pour créer une expression régulière qui ajoute un champ input à l'intérieur de toute balises <form>....</form> d'une page, si et seulement si ce champ input n'existe pas encore dans l'occurrence <form>....</form> en question.

Je sais que que le forum, il n'est pas bienvenu de poser une question et d'attendre que quelqu'un ponde du code alors qu'on ne manifeste aucun effort ou recherche préalable.

Je fais souvent des regexp et j'arrive généralement à m'en sortir sans aide. Mais là, je sèche complètement et j'ai besoin d'aide au moins pour le raisonnement.
Faut-il une fonction avec plusieurs regexp et des conditions, ou une seule regexp suffit-elle pour effectuer l'opération.

En vous remerciant pour vos réponses.

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2014, 13:55

Remarque:
Au départ, je suis arrivé à mon objectif en utilisant DOMDocument.
Avec loadHtml(), il est assez simple de modifier le document html et de faire un saveHTML() après.

Malheureusement, loadHTML/SaveHTML dégradent mon document HTML d'origine en rajoutant des balises <body>, <head> et <html> à des endroits non attendus. De de nombreuses balises <script> et leur contenu sont enlevées de mon document en rendu.

J'ai vu qu'à partir de php 5.4, il est possible d'utiliser $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
Les options permettent de préserver le document d'origine sans en altérer le contenu.

Le pb est que mon script doit être compatible avec PHP 5.3
Si vous avez des suggestions qui me permettraient d'éviter de réécrire mon code en utilisant des regexp, je suis preneur également.

Mammouth du PHP | 2278 Messages

07 août 2014, 15:12

Chalut,
A vue de perchoir aux oiseaux, pourquoi ne pas charger le fichier avec filegetcontents (trait d'union qq part), le modifiert avec ca que tu veux ou peux, et le sauvegarder avec fileputcontents (même remarque sur les traits de désunion).
Si le formulaire est correctement foutu, il suffit de repérer la balise de départ par un strpos et celle de fin par un strpos et de chercher entre deux si on voit un <input> Si on n'en voit pas, il suffit de chercher le > du form et de servir de strstr à ce niveau.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

07 août 2014, 16:04

Bonjour,

Meri bcp pour ta réponse, elle m'a mise sur la bonne voie.
Voici ce que je fais finalement:

- Plutôt que de tester "si et seulement si le champ n'est pas dans le formulaire", je supprime systématiquement toutes les occurrences du champ avec str_replace. Comme cela je suis sûr que ce champ n'est pas dans le code html.

- Ensuite je remplace toutes les occurrences de </form> par <input type="text" name="monchamp" /></form>

Et voilà comme disent les anglais.
Merci bcp.

Mammouth du PHP | 2278 Messages

07 août 2014, 17:23

Si c'est résolu, active le bouton hareng Saur
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD