Relative URLs in absolute wandeln

Vor ein paar Tagen habe ich über den Umstieg auf Feedburner von Google berichtet. Leider hat mein RSS-Feed (selbst geschrieben) einige eingebettete Links und Fotos nicht als absolute Pfadangaben enhalten. Also trat das Problem auf, dass diese nicht sichtbar waren/nicht geladen werden konnten.

Das Problem war mir bis dato nicht aufgefallen, da mein RSS-Reader (Vienna) scheinbar alle relativen Adressen automatisch mit der Feed-URL verheiratet.

Jedenfalls musste das Problem gelöst werden – da ich aber keine Lust hatte an zig stellen im Code die relativen Pfadangaben zu ändern musste eine andere Lösung her. Also beschloss ich eine Funktion zu schreiben, welche mit Hilfe regulärer Ausdrücke die relativen Links in absolute wandelt. Hier der Code:

define("SITENAME", "klein0r.de");
define("BASE_URL", 'http://'.SITENAME.'/');

function complete_relative_urls_logic($matches)
{
	$inner_matches = null;
	if (preg_match('@(./|/)?(.*)@', $matches[2], $inner_matches) && $inner_matches != null) {
		return '<'.$matches[1].'="'.BASE_URL.$inner_matches[2].'"'.$matches[3].'>';
	}
	else {
		return '<'.$matches[1].'="'.BASE_URL.$matches[2].'"'.$matches[3].'>';
	}
}

function complete_relative_urls($text) {
	return preg_replace_callback('@<(img.*src|a.*href)="(?!http://)([^"]+)"([^>]*)>@', 'complete_relative_urls_logic', $text);
}

Beitrag veröffentlicht

in

,

von

Schlagwörter: