begin process at 2012 02 15 05:42:41
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichier / Disque

 > EXTRACTION DE LIENS AVANCÉE

EXTRACTION DE LIENS AVANCÉE


 Information sur la source

Note :
4 / 10 - par 2 personnes
4,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichier / Disque Niveau :Débutant Date de création :04/07/2004 Vu :3 391

Auteur : derfum

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 Description

Cette source complète la suivante :
http://www.phpcs.com/code.aspx?ID=13443
mais permet surtout d'exploiter directement (création d'un tableau) les liens avec quelques options de formattage et de filtrage.

Source

  • <?php
  • /**
  • * FReD - derfum@free.fr
  • * Extraction de liens
  • * renvoie un tableau associatif multidimentionnel
  • * contenant l'adresse cible et le contenu de la balise
  • * ou faux si erreur ou aucun lien
  • *
  • * Options (Somme pour combiner les options) :
  • * - 0: aucune
  • * - 2: Trier le tableau par contenu (tri par position par défaut)
  • * - 4: Trier par contenu et dédoublonner
  • * - 8: Supprimer les liens scripts (javascript:)
  • * - 16: Supprimer les liens email (mailto:)
  • * - 32: Supprimer les ancres locales (#)
  • * - 64: Supprimer les liens locaux
  • * - 128: Simplifier les images
  • */
  • function ExtractLien($PFichier, $POptions = 0)
  • {
  • if (!is_file($PFichier)) {
  • echo 'Erreur : Le parametre n\'est pas un fichier';
  • return false;
  • }
  • $LReturn = array();
  • $LFichier = implode('', file($PFichier));
  • preg_match_all('%<a (.*?)href=("|\')(.+?)("|\')(.*?)>(.+?)</a>%i', $LFichier, $LMatch, PREG_SET_ORDER);
  • if ($POptions >= 128) { // Simplification images
  • $POptions -= 128; $POpImg = true;
  • } else $POpImg = false;
  • if ($POptions >= 64) { // suppression des locaux
  • $POptions -= 64; $POpLoc = true;
  • } else $POpLoc = false;
  • if ($POptions >= 32) { // suppression des ancres
  • $POptions -= 32; $POpA = true;
  • } else $POpLoc = false;
  • if ($POptions >= 16) { // suppression des mailto:
  • $POptions -= 16; $POpLien = true;
  • } else $POpLien = false;
  • if ($POptions >= 8) { // suppression des javscript:
  • $POptions -= 8; $POpJS = true;
  • } else $POpJS = false;
  • foreach($LMatch as $LLiens) {
  • if ($POpImg && preg_match('/^<img (.*)src=("|\')(.+?)("|\')/i', $LLiens[6], $LImg)) {
  • $LLiens[6] = '[IMAGE : ' . $LImg[3] . ']';
  • }
  • if ($POpA && $LLiens[3]{0} == '#') continue;
  • if ($POpLien && substr($LLiens[3], 0, 7) == 'mailto:') continue;
  • if ($POpJS && substr($LLiens[3], 0, 11) == 'javascript:') continue;
  • if ($POpLoc && strstr($LLiens[3], ':') === false) continue;
  • $LReturn[] = array($LLiens[6], $LLiens[3]);
  • }
  • unset($LMatch);
  • if ($LCount = count($LReturn)) {
  • if ($POptions >= 2) { // Tri
  • $POptions -= 2;
  • array_multisort($LReturn);
  • }
  • if ($POptions >= 2) { // Dedoublonnage : array_unique ne marche pas...
  • $POptions -= 2;
  • if ($LCount > 1) {
  • $LTemp = $LReturn[0]; // Existe obligatoirement
  • for($i = 1;$i <= $LCount;$i++) {
  • if ($LReturn[$i] == $LTemp) {
  • unset($LReturn[$i]);
  • } else {
  • $LTemp = $LReturn[$i];
  • }
  • }
  • sort($LReturn); // Permet de reindexer le tableau
  • }
  • }
  • return $LReturn;
  • } else return false; //Pas de lien
  • }
  • /**
  • * Formatte un tableau en liste de liens
  • */
  • function FormatLien($PTableau)
  • {
  • $LReturn = '<ul>';
  • foreach($PTableau as $LLiens) {
  • $LReturn .= '<li><a href="' . $LLiens[1] . '">' . $LLiens[0] . ' [' . $LLiens[1] . ']</a></li>';
  • }
  • return $LReturn . '</ul>';
  • }
  • ?>
<?php
/**
 * FReD - derfum@free.fr 
 * Extraction de liens
 * renvoie un tableau associatif multidimentionnel
 * contenant l'adresse cible et le contenu de la balise
 *               ou faux si erreur ou aucun lien
 * 
 * Options (Somme pour combiner les options) : 
 * - 0: aucune
 * - 2: Trier le tableau par contenu (tri par position par défaut)
 * - 4: Trier par contenu et dédoublonner
 * - 8: Supprimer les liens scripts (javascript:)
 * - 16: Supprimer les liens email (mailto:)
 * - 32: Supprimer les ancres locales (#) 
 * - 64: Supprimer les liens locaux  
 * - 128: Simplifier les images
 */
function ExtractLien($PFichier, $POptions = 0)
{
    if (!is_file($PFichier)) {
        echo 'Erreur : Le parametre n\'est pas un fichier';
        return false;
    } 
    $LReturn = array();
    $LFichier = implode('', file($PFichier));
    preg_match_all('%<a (.*?)href=("|\')(.+?)("|\')(.*?)>(.+?)</a>%i', $LFichier, $LMatch, PREG_SET_ORDER);
    if ($POptions >= 128) { // Simplification images
        $POptions -= 128; $POpImg = true;
    } else $POpImg = false;
    if ($POptions >= 64) { // suppression des locaux
        $POptions -= 64; $POpLoc = true;
    } else $POpLoc = false;
    if ($POptions >= 32) { // suppression des ancres
        $POptions -= 32; $POpA = true;
    } else $POpLoc = false;
    if ($POptions >= 16) { // suppression des mailto:
        $POptions -= 16; $POpLien = true;
    } else $POpLien = false;
    if ($POptions >= 8) { // suppression des javscript:
        $POptions -= 8; $POpJS = true;
    } else $POpJS = false;

    foreach($LMatch as $LLiens) {
        if ($POpImg && preg_match('/^<img (.*)src=("|\')(.+?)("|\')/i', $LLiens[6], $LImg)) {
            $LLiens[6] = '[IMAGE : ' . $LImg[3] . ']';
        } 
        if ($POpA && $LLiens[3]{0} == '#') continue;
        if ($POpLien && substr($LLiens[3], 0, 7) == 'mailto:') continue;
        if ($POpJS && substr($LLiens[3], 0, 11) == 'javascript:') continue;
        if ($POpLoc && strstr($LLiens[3], ':') === false) continue;
        $LReturn[] = array($LLiens[6], $LLiens[3]);
    } 
    unset($LMatch);
    if ($LCount = count($LReturn)) {
        if ($POptions >= 2) { // Tri
            $POptions -= 2;
            array_multisort($LReturn);
        } 
        if ($POptions >= 2) { // Dedoublonnage : array_unique ne marche pas...
            $POptions -= 2;
            if ($LCount > 1) {
                $LTemp = $LReturn[0]; // Existe obligatoirement
                for($i = 1;$i <= $LCount;$i++) {
                    if ($LReturn[$i] == $LTemp) {
                        unset($LReturn[$i]);
                    } else {
                        $LTemp = $LReturn[$i];
                    } 
                } 
                sort($LReturn); // Permet de reindexer le tableau
            } 
        } 
        return $LReturn;
    } else return false; //Pas de lien
} 
/**
 * Formatte un tableau en liste de liens
 */
function FormatLien($PTableau)
{
    $LReturn = '<ul>';
    foreach($PTableau as $LLiens) {
        $LReturn .= '<li><a href="' . $LLiens[1] . '">' . $LLiens[0] . ' [' . $LLiens[1] . ']</a></li>';
    } 
    return $LReturn . '</ul>';
} 
?>

 Conclusion

La fonction FormatLien est juste l'exemple le plus simple d'utilisation du tableau retourné.


 Sources du même auteur

Source avec Zip TUTORIEL POUR AVOIR UN SITE AUX NORMES (XHTML)
Source avec Zip CENSUREPRO
Source avec Zip Source avec une capture PHPAINTCODE

 Sources de la même categorie

UPLOADER DES FICHIER DANSUN DOSSIER, SÉCURISÉ AVEC MOT DE PA... par raizzo
COMPTEUR DE VISITES SUR FICHIER par pierreSabatier
FONCTION RECURSIVE DE DOSSIERS par tefa24600
Source avec Zip CONVERSION DES UNITÉS INFORMATIQUE (O, KIO, MIO, GIO, TIO...... par genetApt151
TROUVER LES DOUBLONS DANS UNE LISTE DE FICHIERS par soobook

Commentaires et avis

Commentaire de GRenard le 05/07/2004 00:09:19

OMG, ta gestion des bits peut être fait différamment et beaucoup mieux !
Au lieu de faire comme tu fais tu compares chaque bits plutot !
De la sorte :
if(($POptions & 128)==128)

et ainsi tu sauves pleins de if et tu n'as plus besoin de passer dans les variables true ou false.

Commentaire de defkrie le 05/07/2004 13:26:42

Oui elle toujours mieux que la mienne codée en 3 minutes à l'adresse suivantes http://www.phpcs.com/code.aspx?ID=13443...

Commentaire de derfum le 05/07/2004 17:00:51

Merci du conseil pour if($var & 128) == 128), je vais tester pour voir comment ça marche, et je mets rapidement à jour.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales