Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1100 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  correcteur HTML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

correcteur HTML

n°1142069
gratith
Posté le 06-07-2005 à 14:24:54  profilanswer
 

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.

mood
Publicité
Posté le 06-07-2005 à 14:24:54  profilanswer
 

n°1142090
plainsofpa​in
Pingouino's lover
Posté le 06-07-2005 à 14:32:10  profilanswer
 

Firefox ferme les balises non fermées ? C'est nouveau ca  :??:


---------------
http://www.alsacreations.com , http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net/. Exemple à ne surtout pas suivre : www.worldinternet.be
n°1142094
remizz
Adventure !
Posté le 06-07-2005 à 14:33:19  profilanswer
 

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 :D)
 
donc ici la regex recherche une balise ouvrante + fermante, et le replace ferme au cas échéant

n°1142100
dwogsi
Défaillance cérébrale...
Posté le 06-07-2005 à 14:35:56  profilanswer
 

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 :D)


 
Allez je suis sur que ca doit se faire avec "pomme", lol on peut tout faire avec un pomme sur mac...


Message édité par dwogsi le 06-07-2005 à 14:36:19

---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1142143
remizz
Adventure !
Posté le 06-07-2005 à 14:52:26  profilanswer
 

dwogsi a écrit :


 
 
 
 
Allez je suis sur que ca doit se faire avec "pomme", lol on peut tout faire avec un pomme sur mac...


 
Trouvé {{{ c'est avec alt :D et j'essayais avec pomme (qui est à la place du alt gr) !

n°1142157
dwogsi
Défaillance cérébrale...
Posté le 06-07-2005 à 14:58:41  profilanswer
 

alala ces mac.... C'est un portable?


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1142183
remizz
Adventure !
Posté le 06-07-2005 à 15:07:39  profilanswer
 

non pas vraiment, mais je sais pas trop ce que c'est (je suis en stage ), surement un G4 (avec écran 21' :D)

n°1142236
dwogsi
Défaillance cérébrale...
Posté le 06-07-2005 à 15:25:41  profilanswer
 

a oui quand même un belle bête mais bon j'aime pas trop les mac, préfére pc avec unix bien entendu!
:)


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
n°1149342
gratith
Posté le 13-07-2005 à 17:33:57  profilanswer
 

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...

n°1155758
Toucouch
Posté le 21-07-2005 à 11:40:15  profilanswer
 

remizz a écrit :

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 :D)
 
donc ici la regex recherche une balise ouvrante + fermante, et le replace ferme au cas échéant


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 ?

mood
Publicité
Posté le 21-07-2005 à 11:40:15  profilanswer
 

n°1155795
FlorentG
Unité de Masse
Posté le 21-07-2005 à 11:53:27  profilanswer
 

Y'a plus simple que tout ce bordel : http://www.php.net/manual/en/ref.tidy.php ;)

n°1155908
Toucouch
Posté le 21-07-2005 à 12:37:23  profilanswer
 


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...

n°1155996
stb
Posté le 21-07-2005 à 14:04:06  profilanswer
 

je plussoie FlorentG, avec tidy ça roule tt seul

n°1156002
gratith
Posté le 21-07-2005 à 14:06:48  profilanswer
 

Toucouch a écrit :

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 ?


 
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>');


 
 


Ouais, c'est cool ça. Je vais me pencher sérieusement dessus, mais à mon avis, ca peut le faire  :)
 

n°1156004
FlorentG
Unité de Masse
Posté le 21-07-2005 à 14:08:21  profilanswer
 

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...

n°1156100
Toucouch
Posté le 21-07-2005 à 15:06:43  profilanswer
 

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.)

n°1156113
FlorentG
Unité de Masse
Posté le 21-07-2005 à 15:14:01  profilanswer
 

Ah ok

n°1156316
gratith
Posté le 21-07-2005 à 16:53:59  profilanswer
 

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?

n°1161088
gratith
Posté le 27-07-2005 à 09:32:12  profilanswer
 

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  :)


Message édité par gratith le 27-07-2005 à 09:32:31

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  correcteur HTML

 

Sujets relatifs
Comment créer un menu fixe (style frame) en html ?Outil de recher en html ou autre pour mon site
pb taille caractères html <form> <input>Recherche / Click sur html machin etc. ( suite )
Créer une page html de tant de largeur sur tant de hauteurProgramme de recherche / click sur html
JTexttpane et HTMLprobleme d affichage avec un tableau html
Javascript et header de page htmlOuvrir une page HTML locale
Plus de sujets relatifs à : correcteur HTML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR