Regulärer Ausdrück: Ersetzen aller URLs innerhalb von HTML-Tags

Mamphil

Erfahrenes Mitglied
Hallo,

ich möchte alle URLs, die innerhalb eines beliebigen HTML-Tags auftauchen, durch eine andere URL ersetzen. Bisher habe ich folgendes gebastelt:

PHP:
$Content = preg_replace('/\<(.*?)(http|https|ftp)(:\/\/)([^>]*)>/i', '<$1/redirect.php?url=$2$3$4$5$6>', $Content);

Leider wirkt dieser Ausdruck auch auf URLs, die außerhalb von HTML-Tags stehen. Über Hilfe würde ich mich sehr freuen!

Vielen Dank und viele Grüße,
Mamphil
 
Es wäre einfacher die einzelnen Attributbezeichner aufzuzählen, etwa:
PHP:
$Content = preg_replace('/(action|cite|classid|codebase|data|href|longdesc|profile|src|usemap)=(["\']?)([^\2\s]+)\2/ie', '"\1=\"/redirect.php?url=".rawurlencode("\3")."\""', $Content);
Unnötige solltest du vielleicht löschen, damit der Reguläre Ausdruck nicht zu komplex ist.
 
Hallo Gumbo,

vielen Dank für deine gute, schnelle und hilfreiche Antwort! Ich habe sie aus gegebenem Anlass nur ein kleines bisschen modifiziert: Aus dem ([^\2\s]+) habe ich ein ([^\2\s]*) gemacht - manche schaffen es, einen leeren String als Parameterwert z. B. von einem Link zu übergeben...

Mamphil
 
Zurück