Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ELIMINER LES FAUTES DE VALIDITÉ W3C COURANTES.


Information sur la source

Catégorie :Application Classé sous : valide, w3c, validateur, br, img Niveau : Débutant Date de création : 14/08/2007 Vu : 4 412

Note :
5,8 / 10 - par 5 personnes
5,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

Description

Cette source vous permettra de corriger automatiquement les erreurs de fermeture des balises uniques et l'oubli du doctype pour les rendre valides au normes W3C. Ici la source est remplie d'une page d'exemple que vous devrez remplacer par votre page, en mettant le premier bout de php au début de chacune et en terminant toutes vos pages par <? ob_end_flush; ?> Pour qu'une partie de votre page ne soit pas modifié entourez-la de deux balises <!--sans-validation--> (paramètre modifiable dans la décclaration de $delimiter)
 

Source

  • <?
  • function validw3c($buffer)
  • {
  • $delimiter='<!--sans-validation-->';
  • $extract=explode($delimiter,$buffer);
  • foreach($extract as $key=>$piece) if($key%2==0)
  • {
  • $ci=array('#<((img|br|link|hr|meta)([^>])*)/>#','#<((img|br|link|hr|meta)([^>])*[^/>])>#','#<(img|br|link|hr|meta)>#','#(\s){2,}/>#');
  • $re=array('<$1 />','<$1 />','<$1 />',' />');
  • $result.=preg_replace($ci,$re,$piece);
  • }
  • else $result.=$piece;
  • if(false===strpos($result,'<!DOCTYPE')) {
  • $result='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • '.$result; }
  • return $result;
  • }
  • ob_start("validw3c");
  • ?>
  • <html>
  • <head>
  • <title>Valide</title>
  • <link type="xml">
  • <meta content="Bla bla">
  • </head>
  • <body>
  • <h1>Page de test</h1>
  • <br>
  • <img src="ceci" alt="Rien"><br>
  • <img src="celà" alt="Rien"/>
  • <!--sans-validation-->
  • <br>
  • <!--sans-validation-->
  • <br >
  • <br />
  • </body>
  • </html>
  • <?
  • ob_end_flush();
  • ?>
<?
function validw3c($buffer)
{
    $delimiter='<!--sans-validation-->';
    $extract=explode($delimiter,$buffer);
    foreach($extract as $key=>$piece) if($key%2==0)
    {
        $ci=array('#<((img|br|link|hr|meta)([^>])*)/>#','#<((img|br|link|hr|meta)([^>])*[^/>])>#','#<(img|br|link|hr|meta)>#','#(\s){2,}/>#');
        $re=array('<$1 />','<$1 />','<$1 />',' />');
        $result.=preg_replace($ci,$re,$piece);
    }
    else $result.=$piece;
    if(false===strpos($result,'<!DOCTYPE')) {
    $result='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
'.$result;  }
    return $result;
}
ob_start("validw3c");
?>
<html>
<head>
<title>Valide</title>
<link type="xml">
<meta content="Bla bla">
</head>
<body>
<h1>Page de test</h1>
<br>
<img src="ceci" alt="Rien"><br>
<img src="celà" alt="Rien"/>
<!--sans-validation-->
<br>
<!--sans-validation-->
<br >
<br />
</body>
</html>
<?
ob_end_flush();
?>

Conclusion

Vous pouvez donc maintenant vous dispenser de doctype et coder avec des <br> ou <meta> sans vous soucier de votre validité en incluant simplement ce code.

Je rajouterais surement d'autres corrections comme par exemple la transformation des attributs interdits (border, align, name etc.) en style CSS.
 

Commentaires et avis

signaler à un administrateur
Commentaire de ordiman85 le 14/08/2007 21:29:03

Bien joué ! J'aurais jamais pensé à utiliser preg_replace qui au niveau des performances est rapide.
Si je faisais une telle classe je parserais directement le html en détectant les '<' et '>' et en fonctionnant comme un xmlparser avec une méthode 'startTag' et une autre 'closeTag' mais ça risque d'être compliqué vu que des balises ne se ferment pas... Avec un tableau d'exceptions qui regroupent les balises souvent non-fermées peut-on peut-être faire ce genre de chose ??

En tous cas la méthode 'preg_replace' est sans doute la méthode qui détruira le moins le document. Je trouve l'idée très bonne :)

signaler à un administrateur
Commentaire de coucou747 le 15/08/2007 12:20:08

ca ne corrigera pas toutes les fautes... et ca ne les corrige que pour du xhtml... le w3c gere bien bien plus de choses que ca

signaler à un administrateur
Commentaire de jdalton42 le 15/08/2007 13:37:11

salut,

coucou747: arretons un peu de critiquer, il fait des efforts quand meme c'est deja mieu que l'autre source.


à améliorer mais c'est deja bien ;) je vote, aller un ptit 6 parce que sa ne corrige pas toute les fautes :p

signaler à un administrateur
Commentaire de coucou747 le 15/08/2007 13:43:21

mal code :

<? => <?php

ob_start("validw3c"); => ob_start('validw3c');

a part ca, bah t'as que 20 lignes de php...

sans compter le fait que tu ne corriges que des fautes que tu avais prevues... et pas les fautes genre t'as inverse deux balises :<p><ul></p></ul>...

bref j'avais mis 3 a l'autre, ici, on va mettre 4 pour l'utilisation des regexp...

signaler à un administrateur
Commentaire de kylekatarnls le 15/08/2007 13:49:22

Alors il faut apprendre à lire, je donne la liste des erreurs corrigées dans la description et moi je ne demande pas à une machine à café de faire des tartes !

signaler à un administrateur
Commentaire de ordiman85 le 15/08/2007 13:53:11

Il n'existe pas de miracle pour ce problème, la meilleure façon de le corriger, c'est de faire valider son code au fur et à mesure qu'on le tape... Ta source proposait une solution simple, pas très complète, mais performante, c'est pour cela que ça me plait. C'est toujours une bricole de plus que je n'utiliserai pas mais c'est toujours mieux que rien...

signaler à un administrateur
Commentaire de coucou747 le 15/08/2007 14:05:30

mais kylekatarnls... j'ai lu, mais ca ne change rien... c'est sans interet... regarde ta source, t'as 20 lignes de codes, evidement, ca ne fait pas le cafe... mais j'en ai plein des trucs de 20 lignes, si je les postais tous, ca serait une horreur phpcs... tu crois franchement que beaucoup de gens peuvent se servir de ca ?

signaler à un administrateur
Commentaire de TheSin le 17/08/2007 23:13:12

par ailleurs, 20 lignes de code réutilisable, celà ne s'appelle pas un snippet de nos jours ? (un petit peu en abus de langage, je précise)

signaler à un administrateur
Commentaire de killer19 le 20/08/2007 09:15:16

Ce code part d'une bonne idée. Mais quitte à vouloir rendre son code valide, autant le coder proprement, et puis ça retirera une couche de "correction" sur un site en production. Mais en développement ça peut servir je pense à "apprendre" les erreurs communes, et à les prendre en compte pour ne plus les refaire.

Après, d'un niveau plus technique, c'est sur que c'est plutot léger, par rapport à un parser total (TidyPhp ? :p) qui réécrirait entièrement le code, enfin c'est un choix. Mais on souhaiterait quand même plus de customisation, par exemple il me vient à l'esprit la déclaration de DTD : on a d'office un doctype qui ne spécifie pas si on bosse sur du strict ou transitionnel... Enfin, à mon avis il y a pas mal de choses qui pourraient être améliorées pour rendre ce programme très intéressant.

signaler à un administrateur
Commentaire de Gwinyam le 20/08/2007 09:49:22

Une bien belle chose de faite, c'est toujours ça de fait. Et en effet, on ne peut pas demander à une machine à café de faire des tartes. Je donne un 8 pour l'aspect pratique de la source et pour l'utilisation des expressions rationelles.

Après évidemment, le mieux reste de coder proprement, dès le début ;)

signaler à un administrateur
Commentaire de frank_85 le 20/08/2007 10:30:45

je suis du même avis que killer19: autant coder propre...
A un moment ou un autre les erreurs masquées finiront par ressortir...
Perso je préfère passer du temps à cherhcer du code valide au besoin ou vérifier mes erreurs plutot que vouloir camoufler la misère...
Mais tout cela n'est bien sur que mon avis...

signaler à un administrateur
Commentaire de TheSin le 20/08/2007 11:21:50

Je crois plutôt que c'est un avis relativement général ici, puisque j'en suis (de cet avis là) ^^.

signaler à un administrateur
Commentaire de kylekatarnls le 20/08/2007 13:54:38

> Frank_85
Il ne s'agit pas de masquer des fautes, puisque le code arrive au navigateur sans fautes (celles corrigées) et on ne code pas valide pour soi mais pour les autres je pense. C'était juste pour dire que le mot ne me semble pas approprié.

signaler à un administrateur
Commentaire de bricoloudu85 le 20/08/2007 14:53:02

juste au passage...
C'est pas parce que coucou747 est le meilleur selon ses propres statistiques que les autres n'ont pas le droit d'exister....

signaler à un administrateur
Commentaire de Dark_Genova le 20/08/2007 16:52:36

@coucou747 : en voilà des remarques non-constructives et argneuses.
Première chose tu cites une erreur de codage :
" ob_start("validw3c"); => ob_start('validw3c'); "
Désolé mais il ne s'agit ABSOLUMENT pas d'une erreur de codage, mais d'un code PHP on ne peut plus valide. Par erreur de codage, tu as probablement voulu sous entendre une micro optimisation inutile de 0.00000001 seconde, micro optimisation déjà faite par le cache si son serveur en possède un. Le genre de micro optimisation dont seul se souciera un développeur de seconde catégorie.

Seconde remarque : "a part ca, bah t'as que 20 lignes de php..."
Mieux vaut 20 lignes de code PHP utiles, que 150 lignes de code inutile. Depuis quand le nombre de lignes joue dans l'utilité d'un code source, est à toi d'en juger ?

Je trouve l'idée de base de ce code source très sympatique. Bien entendu le but de cette source n'est clairement pas de fournir un parseur alternatif aux nombreuses extensions Firefox faisant déjà ce boulot. Au lieu de descendre un débutant en PHP qui aurait eu le malheur de pas poster une source conforme à tes petits critères personels, prend plutôt le temps de lui expliquer ses erreurs gentiment au lieu de le prendre de haut.

PS : je trouve cette source bien plus utile qu'une source du type http://www.phpcs.com/codes/MD5-RELATION-RECIPROQUE_42416.aspx qui ne sert strictement à rien et exploite le PHP à des fins pour lesquels il n'est pas fait. Fait toi un brute force en C si tu veux un code source optimisé.

A bon entendeur.

Maintenant pour répondre directement au sujet de la source, je rejoint l'avis général : mieux vaut coder proprement dès le début que de passer par un correcteur. Mais il vrai que pour les codeurs de l'ancienne qui ont démarés avec le bon vieux HTML de base, certaines habitudes sont dures à oublier et cet outil peut leur servir.

signaler à un administrateur
Commentaire de kishkaya le 20/08/2007 16:59:39

Il est fait en quoi le moteur d'analyse des pages html du w3c ?
Est-il open source ??

signaler à un administrateur
Commentaire de TheSin le 20/08/2007 17:07:54

@kishkaya : en java, oui il est open source et gratuit ;-)
on peut même l'installer sur son serveur tomcat si on veut :-)

signaler à un administrateur
Commentaire de kishkaya le 20/08/2007 17:12:46

Ca s'est simpa.
Mais bon, ca sert pas a grand chose de faire du php si t'as un servlet a côté.
Il faudrait tenter de le porter en php...=)

signaler à un administrateur
Commentaire de coucou747 le 20/08/2007 18:08:50

quand je disais "a part ca, bah t'as que 20 lignes de php..." je parlais du fait que ca ne constitue pas vraiment une source mais plutot un snippet... je poses peut-etre trop de sous entendus...

signaler à un administrateur
Commentaire de TheSin le 20/08/2007 21:44:52

a bon ? moi j'avais compris pourtant ... (la preuve avec mon post qui répondait au tient ^^)

signaler à un administrateur
Commentaire de audayls le 28/08/2007 12:31:13

Aloha tout le monde ! Retour de vacance c'est le moment de reprendre les bonnes habitudes XD

@jdalton42 : Il faut accepter les critiques car celà permet de s'améliorer, d'autant plus que les remarques de coucou747 sont constructives et permettent de progresser.

@Dark_Genova "je trouve cette source bien plus utile qu'une source du type http://www.phpcs.com/codes/MD5-RELATION-RECIPROQUE_42416.aspx qui ne sert strictement à rien et exploite le PHP à des fins pour lesquels il n'est pas fait." : Si nous nous exploitions uniquement PHP pour ces premières fonctions, nous l'utiliserions que pour des Forums et pour des Livres d'or... Il est justement très interessant justement d'aller plus loin et de "pousser la bête" XD

Sinon que dire... C'est vrai que ce n'est que 20 lignes mais une vrai correction demanderai beaucoup trop de temps pour être générée de la sorte. Alors je suis de l'avis de "coucou747" et de "TheSin" : ce code est plus un snippet et je suis également de l'avis de "Kishkaya" pour porter en PHP un validateur W3C (je trouve l'idée pas mal je vais m'y mettre à mon retour ^^)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Validateur W3C [ par audayls ] Bonjour&nbsp;&#224; tous,&nbsp;&nbsp;&nbsp;Je voudrai savoir si il existe un validateur W3C en local (sans avoir besoin d'aller sur internet)J'en ai v Problème de variable entre le local et sur un serveur web [ par mickaelpfr ] Salut a tous ,j'ai un sou&#231;is que je n'arrive pas a r&#233;soudre, une variable qui est "undefined" lorsque que j'essaye de l'utiliser sur un serv Question sur la norme W3C [ par yergo ] Bonjour tt le monde,j aimerais avoir des informations sur la norme w3c:ca consiste a koi ?comment realiser un projet (php ou autre) qui respecte cette Pb vérification de "case cochée" [ par Tit0x ] salut la compagnie ! J'ai un petit probl&#232;me ( enore ? ) En fait, j'aimerais que les personnes qui ne cochent pas une case ne puissent pas acc& Qualité horrible d'une vignette GIF transparent lors du redimentionnement [ par khoudj ] Bonjour, j'ai un petit probl&#232;me: quand je cr&#233;e en php une vignette d'une image gif avec une transparence, la vignette est bien cr&#233;e, & Ecriture dans un fichier text [ par StiriX ] Bonjour all, voici mon probleme: J'&#233;cris dans un fichier texte des donn&#233;es recu &#224; partir d'un formulaire. Probleme lors de l'&#233;cr redimension images a l'upload sans proportion [ par tynmar ] Bonjour tout le monde,J'aimerai modifier la taille d'une image &#224; l'upload. J'ai &#233;crit mon script d'upload et maintenant je n'arive pas &#224 Probleme JBook [ par Tux1 ] Bonjour,Jai un probleme avec le jbookSur freeregardezSi vous pouvez m'aider mercihttp://tux.onex.free.fr/jbook/et regardez l'adminCar je peux pas y ac Convertir une chaine en une url valide. [ par cz1702 ] Bonjour &#224; tous,Existe-t-il une fonction en PHP permettant de convertir les caracat&#232;res ASCII en carac&#232;res HTTP valide?exemple : les&nbs A propos des images GD [ par ckhalilo ] j'ai un problème d'integration des image dans un formulaire, pour eviter l'envoie automatique dans mon formulaire bref mon problème est le suivant qu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.