Occi Posté 8 Janvier 2009 Partager Posté 8 Janvier 2009 (modifié) Bonne année le Hub ! je suis en train de faire une classe pour nettoyer du HTML (virer le javascript, virer des attributs et des balises potentiellement ouverte au XSS & co). D'ailleurs si quelqu'un connaît un script ou un début de script je suis preneur, c'est un calvaire cette classe :/ J'ai trouvé la classe Tidy (qui hélas élimine du code qui n'a pas lieu d'être éliminé), HTML purifier (usine à gaz et comportement bizarre). Mon problème pour être plus clair est que je cherche à remettre au propre une chaîne du style : <p> phrase 1 correctement imbriqué</p><p> phrase 2<p> phrase 3 allons y gaîment sans fermer le "p" de la phrase 2</p> la j'ouvre pas mais je ferme ma phrase 4</p> En gros du code mal imbriqué, en Regex il n'y a pas le choix je pense. Une idée sur la façon de faire svp ? Modifié 8 Janvier 2009 par Occi Lien vers le commentaire Partager sur d’autres sites More sharing options...
lionel.a Posté 9 Janvier 2009 Partager Posté 9 Janvier 2009 (modifié) Bonjour, Pourquoi veux-tu compliquer par une classe ? Utilise les simples fonctions des expressions régulières (ou rationnelles) : * doc officielle ereg_replace * http://fr.php.net/manual/fr/book.regex.php Par contre, comme tu le fais remarquer, ça ne va pas être évident : - cas n°1 : ok, - cas n°2 : rechercher ce qui commence par <p> et qui est suivi par un autre <p> (et non pas </p> puisque la syntaxe est mal écrite) - cas n°3 : idem, sauf qu'il te faut chercher ce qui commence par </p> et suivi par un autre </p> Début de solution : Définis une liste de balises, et recherche celles qui sont 2 fois successives. Modifié 9 Janvier 2009 par lionel.a Lien vers le commentaire Partager sur d’autres sites More sharing options...
Occi Posté 9 Janvier 2009 Auteur Partager Posté 9 Janvier 2009 (modifié) Merci pour ton aide. Clair ça n'est pas évident, j'ai trouvé aucun script ou début de script qui pourrait me mettre sur une bonne route à suivre. Et en ce qui concerne l'ouverture / fermeture ça fait mal à la tête. - Je suis en train de faire comme tu dis, je me définis une liste de balise qui ne s'imbrique pas du style : <p>, <strong>,<b>,<i>,<u>,<em>,<h*>,<a>, les balises de formulaire(<form>,<input>,<select>,<option>,<optgroup>,<textarea>), je n'en vois pas d'autre qui ne s'imbrique pas ? Là ça reste jouable quoi qu'un peut prise de tête. Je vais faire comme tu me le conseille pour la détection. Je me base en 1er sur un tableau de balise correcte et un tableau d'ouverture pour comparer par la suite les fermetures qu'il me manque. - Les balises qui s'imbrique... là je jette l'éponge pour l'instant je ne vois pas comment gérer ça, il faudrait que je compte les ouvertures, que je compare avec les fermetures, ensuite il m'est impossible de savoir qu'elle balise a été oublié d'être fermé par exemple : <div>plop1<div>plop2</div>plop3 Si la fermeture de plop2 est en fait la fermeture de plop1 ça plante, donc je laisse tomber cette lourde partie incertaine. Modifié 9 Janvier 2009 par Occi Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick Posté 9 Janvier 2009 Partager Posté 9 Janvier 2009 Salut, il existe de nombreux scripts asp qui font ça très bien, un de plus plus ? Pourquoi réinventer la roue? Maintenant si tu souhaites que ce script soit sur ton site, il est toujours possible de le faire en iframe, bien qu'illégale ça fonctionne avec certains. Maintenant si tu veux absolument le faire toi même, bravo quel courage, personnellement avant de m'intéresser aux imbrications, je commencerai par le début : est ce qu'il y a autant de balises fermées que de balises ouvertes ? ++ Patrick Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kioob Posté 10 Janvier 2009 Partager Posté 10 Janvier 2009 Bonsoir, je fais (en partie) ça durant la phase de compilation de mon moteur de template, et je n'utilise pas vraiment les expressions régulières qui (en tous cas chez moi) ne permettent pas du tout de gérer ça. J'utilise donc un parseur de texte "classique", qui construit une pile des balises ouvertes, c'est à dire un tableau qui va contenir par exemple 'html, body, div, form, fieldset, p' ce qui permet de savoir qu'on est actuellement dans un tag "P". En cas d'ouverture de tag, je vérifie que le nouveau tag soit autorisé à être imbriqué dans le tag courant. Et en cas de fermeture de tag, je vérifie qu'on ferme bien le dernier tag de la liste. Et finalement en fin de traitement s'il reste des tags dans ma pile c'est qu'ils n'ont pas été fermé. Après la contrainte est différente : je ne cherche pas à corriger le problème, mais à le détecter. Dans mon cas le but est d'éviter que les devs nous livrent un code non valide. Maintenant s'il y a des librairies PHP facilement réutilisables, comme le dit Patrck pas la peine de réinventer la roue Lien vers le commentaire Partager sur d’autres sites More sharing options...
Occi Posté 21 Janvier 2009 Auteur Partager Posté 21 Janvier 2009 Bonjour et désolé pour la réponse tardive. Merci pour vos conseils ils m'ont aidés à y voir plus clair pour la conception, j'ai donc fais la partie remise en ordre des ouvertures / fermetures d'une liste de balises qui ne s'imbriquent pas comme <p>blabla<p>blabla2</p> Je compte utiliser ta solution kioob, de se servir d'un tableau pour détecter les balises imbriqués mal fermé. Je dis "je compte" car pour détecter c'est nikel par contre j'ai l'impression qui n'existe pas trop de solution à part l'oeil humain pour savoir qu'elle était la mise en page à la base (à la base est-ce une ouverture oubliée ou une fermeture oubliée). En attendant de trouver je fais un minimum de parsing pour remettre en ordre les balises non impraticable comme <p></p> et je vire le javascript. Là j'en suis au parsing des attributs, puis le reste que je n'ai pas réussit à traiter je vire. Evidemment ré-inventer la roue pour une routine ne m'emballe pas spécialement, en PHP je n'ai rien trouvé d'adapté (souvent il y a des résultats inattendu avec Tidy et HTML Purifier par exemple) et en ASP je ne connais pas, je vais éviter de mélanger les 2 langages dans ce script. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant