correcteur HTML - PHP - Programmation
Marsh Posté le 06-07-2005 à 14:32:10
Firefox ferme les balises non fermées ? C'est nouveau ca
Marsh Posté le 06-07-2005 à 14:33:19
avec PHP, il faudrait utiliser les regex.
par exemple un preg_match qui, si il retourne 'false' enchaine sur un preg_replace complétant la chaine en fermant la balise en question
du style (if !preg_match('$ma_regex', $ma_chaine))
(
preg_replace($ma_regex,$correction,$ma_chaine);
)
(je n'ai toujours pas trouvé la touche pour faire des accolades sur MAC )
donc ici la regex recherche une balise ouvrante + fermante, et le replace ferme au cas échéant
Marsh Posté le 06-07-2005 à 14:35:56
plainsofpain a écrit : Firefox ferme les balises non fermées ? C'est nouveau ca |
Disons plutot qu'il essais de fonctionner avec des balises incorrectement fermées mais on peut pas vraiment dire qu'"il les fermes"
remizz a écrit : (je n'ai toujours pas trouvé la touche pour faire des accolades sur MAC ) |
Allez je suis sur que ca doit se faire avec "pomme", lol on peut tout faire avec un pomme sur mac...
Marsh Posté le 06-07-2005 à 14:52:26
dwogsi a écrit : |
Trouvé {{{ c'est avec alt et j'essayais avec pomme (qui est à la place du alt gr) !
Marsh Posté le 06-07-2005 à 15:07:39
non pas vraiment, mais je sais pas trop ce que c'est (je suis en stage ), surement un G4 (avec écran 21' )
Marsh Posté le 13-07-2005 à 17:33:57
Rebonjour,
Utiliser les expressions régulières pour coriger les balises non fermée a effectivement fonctionné. Le site qui posait problème se laisse analyser sans soucis.
Malheureusement, je suis confronté a un autre problème maintenant. Ce n'est plus avec les balises non fermés, mais avec les attributs des balises non protégées par des doubles quotes que mon moteur d'analyse se casse les dents.
Encore une fois, si je sauvegarde la page avec Firefox et que j'analyse la page sauvegardée, plus de problème !!
Ok, je pourrais à nouveau régler le problème des attributs non 'quotées' à l'aide d'expression régulière mais j'ai quand meme peur que sur un autre site, ce ne sera plus ni les balises, ni les attributs des balises, mais encore autre chose qui fera planter mon moteur.
L'idéal, ce serait un outil qui fasse à peut pret la meme chose que Firefox, qui corrige de la même façon.
Alala, si tous les sites étaient conforme HTML ou XHTML, leur analyse serait tellement plus simple...
Marsh Posté le 21-07-2005 à 11:40:15
remizz a écrit : avec PHP, il faudrait utiliser les regex. |
Alors justement, j'ai un problème pour écrire cette regex en PHP : je n'arrive pas à trouver la syntaxe correcte pour décrire une séquence déjà trouvée.
Exemple simpliste. Je prends la chaîne suivante:
<html><body><strong></strong></body></html> |
.
Je veux supprimer les balises vides (<xyz></xyz> ).
En PERL, on pourrait faire ceci :
s!<([^>]+)></\1>!! |
Le \1 reprend le contenu de la sous chaîne capturée par la première paire de parenthèses (ici, strong).
Mais en PHP, impossible de trouver la syntaxe coorecte.
Il est bien possible de récupérer le contenu des parenthèses dans les chaînes de remplacement comme ceci :
echo preg_replace('([0-9]+)', 'N=\\1', 'azerty 123 WXYZ'); |
qui remplace "123" dans la chaîne par "N=123". Mais je n'arrive pas à faire ce que je veux en PHP.
echo ereg_replace('<([^>]+)></\\1>', '', '<html><body><strong></strong></body></html>'); |
ne modifie rien à la chaîne transmise.
Est-ce impossible en PHP ? Sinon, quelle est la bonne syntaxe ?
Marsh Posté le 21-07-2005 à 11:53:27
Y'a plus simple que tout ce bordel : http://www.php.net/manual/en/ref.tidy.php
Marsh Posté le 21-07-2005 à 12:37:23
FlorentG a écrit : Y'a plus simple que tout ce bordel : http://www.php.net/manual/en/ref.tidy.php |
Merci pour l'info, mais ça ne répond pas à ma question sur les regex. Et puis ce que je veux faire n'est pas aussi compliqué qu'un correcteur HTML. Il suffirait que ma regex fonctionne. En attendant, je vais passer par un system("perl ..." ). C'est un peu gruik, mais bon...
Marsh Posté le 21-07-2005 à 14:06:48
Toucouch a écrit :
ne modifie rien à la chaîne transmise. |
Ce n'est pas impossible en PHP. En rajoutant un délimiteur (comme '%' par exemple) et en utilisant la fonction preg_replace, cela fonctionne :
echo preg_replace('%<([^>]+)></\\1>%','','<html><body><strong></strong></body></html>'); |
FlorentG a écrit : Y'a plus simple que tout ce bordel : http://www.php.net/manual/en/ref.tidy.php |
Ouais, c'est cool ça. Je vais me pencher sérieusement dessus, mais à mon avis, ca peut le faire
Marsh Posté le 21-07-2005 à 14:08:21
Ce qu'il faut aussi faire, c'est corriger les éléments interdits dans d'autres (par exemple, pas de <p> dans un <a> ), et là ça devient compliqué, d'où l'utilisation de tidy...
Marsh Posté le 21-07-2005 à 15:06:43
FlorentG a écrit : Ce qu'il faut aussi faire, c'est corriger les éléments interdits dans d'autres (par exemple, pas de <p> dans un <a> ), et là ça devient compliqué, d'où l'utilisation de tidy... |
Pas si tu interdis tout attribut dans les balises, à l'exception de href dans les liens... (Ce qui est mon cas.)
Marsh Posté le 21-07-2005 à 16:53:59
Pas moyen de la faire marcher la lib tidy.
Le module a bien compiler (installé avec pear -v install tidy), avec phpinfo(), il me dit bien que le module tidy est chargé, mais à partir du moment ou je fais un $tidy = new tidy, la le seul résultat est un message d'erreur qui me dit qu'il est impossible d'instancier une classe qui n'existe pas !!
Y a des instructions spéciales (style un fichier a loader) pour l'utiliser cette lib?
Marsh Posté le 27-07-2005 à 09:32:12
C'est cool, j'ai réussi a faire fonctionner la librairie tidy. Elle fait exactement ce que je veus, elle corrige pas mal d'erreur qui faisait planté mon moteur
Marsh Posté le 06-07-2005 à 14:24:54
Bonjour,
Voila, je suis en train de développer un outil qui analyse des pages HTML. L'outil fonctionne pas trop mal, mais perd un peu les pédales avec des pages internet malformées, càd où les balises ouvertes ne sont pas correctement fermées.
Je cherche donc un petit outil en php qui fermerrait les balises de maniere intelligente, à la manière de firefox. En effet, si je sauvegarde une page HTML avec firefox, le code est corrigé, et mon outil fonctionne correctement.
Merci.