Titel der verlinkten Seite

jeko

Lounge-Member
[PHP] Titel der verlinkten Seite

Hallo zusammen,

Die folgende Funktion gibt euch den Titel einer HTML-Seite zurück, die hinter einer URL steht.
Zu sehen ist der Effekt auch hier im Forum, wenn man einen Link postet und das Forum anstatt der URL gleich den Titel der verlinkten Seite zeigt (http://de.wikipedia.org/wiki/Forum wird zu Forum - Wikipedia)

PHP:
function getTitleFromURL($url) {
	// string getTitleFromURL ( string url )
	// Gibt den Seitentitel des Dokuments hinter der URL $url zurück
	// Bei Fehler wird die übergebene URL $url zurückgegeben
	//
	// Erfordert: PHP 4 oder höher

	$debugMode = FALSE; // Wenn true, wird bei Fehler nicht die URL $url zurückgegeben, sondern eine Fehlermeldung

	$urlregexp = '/(http:\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i';
	if (!preg_match($urlregexp,$url)) return (!$debugMode)?$url:"Invalid URL ($url)"; // Check auf URL
	$info = parse_url($url);
	$host = $info['host'];
	$get = ( (empty($info['path']))?'/':$info['path'] ) .$info['query'];
	$line = '';
	$file = fsockopen($host,80,$eno,$estr,2); // Verbindung mit Host aufnehmen
	if (!$file) return (!$debugMode)?$url:"Failed to open socket ($url): PHP says: $eno, $estr";
	fputs ($file, "GET $get HTTP/1.1\r\nHost: $host\r\n\r\n"); // Anfrage schicken
	$line=fgets($file,16);
	if ($line != 'HTTP/1.0 200 OK' AND $line != 'HTTP/1.1 200 OK') { // Nur bei HTTP 200 weitermachen
		fclose($file);
		return (!$debugMode)?$url:"Site not available ($url): HTTP status code is not 200";
	}
	while (!feof($file) && $line != '') { // Prüfen, ob HTML
		$line = fgets($file,24);
		if ($line == 'Content-Type: text/html') break;
	}
	if ($line=='') {
		fclose($file);
		return (!$debugMode)?$url:"Document contains no HTML($url): Content Type has to be text/html";
	}
	$titleregexp = '/.*<title>([^<>]*)<\/title>.*/i';
	while (!feof($file)) { // Nach <title>-Tag suchen und Titel zurückgeben
		$line = fgets($file,10240);
		if (preg_match($titleregexp,$line,$title)) {
			fclose($file);
			return $title[1]; // Titel gefunden, zurückgeben
		}
	}
	fclose($file);
	return (!$debugMode)?$url:"No title-Tag found ($url)"; // Titel wurde nicht gefunden
}

Hoffe sie funktioniert gut,
jeko
 
Zuletzt bearbeitet:
Zurück
Oben