Link testen / Linktext auslesen

annaloga

Grünschnabel
Hallochen,

habe mal folgende Fragen zu untenstehenden Code!
Bei der Funktion handelt es sich um einen simplen Linkcheck. Zum einen wird geprüft ob ein bestimmter Link auf einer Seite vorhanden ist und zum anderen sollte der Linktext zum Link welche auf der zu durchsuchenden Seite ist, ausgelesen werden. Hierbei wird alles nach dem </a> abgeschnitten und alles davor bis zum > zählt als Linktext.
Leider funktioniert das nur bei ca. 3% der Links. Entweder wird nicht der richtige ausgelsen oder garkeiner weil der Linktext zwischen <span> ect. steht.

Wie läßt sich dies beheben, so das der richtige Linktext überhaupt gefunden wird und nach möglichkeit auch bei jedem Link

Ich habe davon nicht wirklich Ahnung :(

MFG Anni

PHP:
$i = der gesuchte Link
$s = die zu durchsuchende Website

function pc_link_extractor($i,$s){
  $return = array();
  $return['gefunden'] = 2;
  $handel = file($s);
  foreach($handel as $line){
    if(ereg("http://",$line)){
      if(ereg($i,$line)){
        $linktext = explode("</a>",$line);
        $linktext = explode(">",$linktext[0]);
        $menge = count($linktext);
        $return['linktext'] = $linktext[$menge - 1];
        $return['gefunden'] = 1;
      }
    }
  }
  return $return;
}
 
Effizienter sind die Preg-Funktionen, wenn es um reguläre Ausdrücke und PHP geht:
PHP:
$string = '<a href="http://tutorials.de" foo="bar">linktext</a>';
preg_match_all('!<a href="([^\042]*)"[^>]*>(.*)</a>!Uis', $string, $match, PREG_SET_ORDER);
var_dump($match);

Den Zweck deiner Funktion würde ich gerne noch wissen, damit es mit einer Lösung auch hinhaut - Ansonsten könnte ich maximal mit dem hier aufwarten, nachdem, wie ich es verstanden hab:
PHP:
function pc_link_extractor($lookfor, $lookat) {
    $matches = array();
    $fgc     = file_get_contents($lookat);
    // $menge   = preg_match_all('!<a href="([^\042]*)"[^>]*>' . addslashes($lookfor) . '</a>!Uis', (string) $fgc, $matches, PREG_SET_ORDER);
    preg_match_all('!<a href="([^\042]*)"[^>]*>' . addslashes($lookfor) . '</a>!Uis', (string) $fgc, $matches, PREG_SET_ORDER);
    return $matches;
}

// oder

function pc_link_extractor($lookfor, $lookat) {
    $matches = array();
    $fgc     = file_get_contents($lookat);
    // $menge   = preg_match_all('!<a href="' . addslashes($lookfor) . '"[^>]*>(.*)</a>!Uis', (string) $fgc, $matches, PREG_SET_ORDER);
    preg_match_all('!<a href="' . addslashes($lookfor) . '"[^>]*>(.*)</a>!Uis', (string) $fgc, $matches, PREG_SET_ORDER);
    return $matches;
}

Die Datei "lookat" wird durchsucht nach entweder dem Linkziel oder dem Linktext... An der Stelle wusste ich nicht genau, wonach gesucht werden soll. Testweise einfach mal den Rückgabewert via var_dump ausgeben ;) Mit [phpf]count[/phpf] oder durch den Einsatz der Variable $menge (auskommentiert) kann dann auch ganz schnell die Anzahl an Vorkommnissen ermittelt werden.
 
Hallo,

vielen Dank für Deine Antwort :) So früh am Morgen schon so fleißig ;)

Die Funktion ist eigentlich ncihts anderes als ein Backlink Check.
Auf einer Website wird nach einem bestimmten Link gesucht Wenn der Link vorhanden ist dann soll der Linktext ausgelesen werden.

Die Ausgabe beschränkt sich bei dem gesuchten Link auf gefunden ja oder nein (1oder2) Der linktext soll komplett ausgegeben werden.

Dein erster Code ist sehr gut :) Aber auch dort treten Probleme auf wenn der Quelltext des Links angaben wie Classe Id Style etc. vor dem href enthällt.
 
Zurück