- <?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>';
}
?>