Parsing d'une page html

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 298 fois - Téléchargée 27 fois

Contenu du snippet

fonction permettant de traiter le code HTML d'une page avant son envois a l'utilisateur.

permet d'automatiquement ajouter aux pages des tags pour les liens type email ou URL, ou alors mettre des mots en gras ou remplacer les caracteres speciaux par leurs valeurs HTML.

Source / Exemple :


function callback($buffer)
    {
    function parser($chaine, $fonction = 'sous_callback')
        {
        return preg_replace_callback("/(<[^<>]*>)([^<>]+)/", $fonction, $chaine);
        }
    function address_tags($chaine)
        {
        $tmp = eregi_replace('(http://[[:alnum:]\._-]+\.[[:alnum:]{2-3}/[[:alnum:]/._-]*)', '<a href="\\1">\\1</a>', $chaine);
        $tmp = eregi_replace('(:alnum:+[[:alnum:]\._-]*:alnum:+@:alnum:+[[:alnum:]\._-]*:alnum:+\.:alnum:{2,3})', '<a href="mailto:\\1">\\1</a>', $tmp);
        return ($tmp != $chaine)?$tmp:false;
        }
    function sous_callback($arg)
        {
        $arg[2] = html_entity_decode($arg[2], ENT_QUOTES);
        $arg[2] = htmlentities($arg[2], ENT_QUOTES);
        if(!ereg('title', $arg[1]))
            {
            $arg2 = false;
            if(ereg('(http://|@)', $arg[2]) && !ereg('(http://|@)', $arg[1]))
                {
                $arg2 = address_tags($arg[2]);
                }
            if($arg2)
                $arg[2] = parser($arg2, 'sous_callback2');
            else
                $arg[2] = sous_callback2($arg[2]);
            }
        return $arg[1].$arg[2];
        }
    function sous_callback2($arg)
        {
        if(is_array($arg))
            {
            $tocheck = $arg[2];
            $tag = $arg[1];
            }
        else
            {
            $tocheck = $arg;
            $tag = '';
            }
        if(!ereg('(http://|@)', $tocheck))
            {
            foreach($GLOBALS['abbr'] as $key=>$val)
                {
                $key = html_entity_decode($key, ENT_QUOTES);
                $val = html_entity_decode($val, ENT_QUOTES);
                $key = htmlentities($key, ENT_QUOTES);
                $val = htmlentities($val, ENT_QUOTES);
                $tocheck = ereg_replace('([[:space:][:punct:]]|^)('.$key.')([[:space:][:punct:]]|$)', '\\1<acronym title="'.$val.'">\\2</acronym>\\3', $tocheck);
                }
            foreach($GLOBALS['SpWords'] as $key=>$val)
                {
                $key = html_entity_decode($key, ENT_QUOTES);
                $key = htmlentities($key, ENT_QUOTES);
                $tocheck = eregi_replace('([[:space:][:punct:]]|^)('.$key.')([[:space:][:punct:]]|$)', '\\1<span class="'.$val.'">\\2</span>\\3', $tocheck);
                }
            }
        return $tag.$tocheck;
        }

    $top = ($GLOBALS['HTML_Structure'] == 'normal')?setUsualHTMLPage():setSpecialHTMLPage();
    $bot = ($GLOBALS['HTML_Structure'] == 'normal')?showUsualEnd():showSpecialEnd();
    $buffer = $top.$buffer.$bot;

    $titre = showTitre();
    $buffer = str_replace('<%-----TITRE-----%>', $titre, $buffer);

    return parser($buffer);
    }

Conclusion :


les effets de cette fonction :

- ajoute le debut de la page HTML en fonction de la structure choisie
- ajoute la fin de la page HTML en fonction de la structure choisie
- remplace le tag <%-----TITRE-----%> par la valeur que doit avoir le titre

- recherche dans les textes hors tags differentes choses :
- les URL et les emails (ajoutes les tags pour les liens)
- les caracteres speciaux (les traduit en entités HTML)
- des abbreviations (definies dans un tableau $GLOBALS['abbr'])
- des mots pour les mettre en gras par exemple (definis dans un tableau $GLOBALS['SpWords'])

pour utiliser cette fonction, il faut utiliser la methode ob_start('Callback');

A voir également

Ajouter un commentaire

Commentaires

cs_glad
Messages postés
97
Date d'inscription
lundi 26 novembre 2001
Statut
Membre
Dernière intervention
24 février 2012
-
salut,

un exemple serait le bien venu...
Merci
A+
Mechanicman
Messages postés
60
Date d'inscription
lundi 28 juillet 2003
Statut
Membre
Dernière intervention
7 novembre 2004
-
J'ai pas regardé en détail, mais ça à l'air d'être du bon..Tiens ça me fait penser qu'il faut que j'en fasse un... ;).
reflexinfo
Messages postés
21
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
21 décembre 2004
-
bonjour ,
je suis débutant en php
je suis actuellement sur un développement dun peit moteur de recherche (tout est ok)
mais je chercher à faire du parsing de mes pages avant leur affichage ,votre fonction devrais corresponde ???
mais je suis imcapable de la faire fonctionner !

je dois à partir d'un lien URL allez charger une page de mon site (html ou php)
la faire afficher avec le mot rechercher surligné ou en gras

donc voilà je dois passer deux arguments (le nom de la page et son extension ainsi que le mot rechercher

je ne sais pas comment faire

merci d'avance

Stéph
simonlartiste
Messages postés
39
Date d'inscription
vendredi 12 novembre 2004
Statut
Membre
Dernière intervention
28 décembre 2007
-
Bonjour,

c est vrai que ca serait cool de mettre un exemple parceque apparemment, c est pas trés facile à utiliser,
d avance merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.