Parsing d'une page html

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

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.