- Grundsätzlich sollte der Link nur mit "http://example.com/link.php?link=" erweitert werden.
wenn du das machst, funktionierts nicht mehr - das sage ich dir bereits - darum willst du
a) links erkennen
b) wenn sie spezifische muster erfüllen etwas davor setzen
c) die verweisziele kontextspezifisch codieren
- Ist es ein interner Link sollte er nicht erweitert werden.
sagtest du breits - doch ein interner link hat "viele gesichter"
- Es sollen nur Links mit den Protokolen HTTP, HTTPS und FTP erweitert werden.
auch das sagtest du bereits
- Der Link sollte wenn möglich mit urlencode codiert werden.
siehe 1c) - nicht wenn möglich sonder zwingend
Wenn möglich sollte der Link dannach so aussehen:
"http://example.com/link.php?protokol=protokol&host=hostname&link=restlicherLink&filetyp=dateiextension"
das ist neu
wie schon erwähnt, analysiere was du möchtest - im detail
was du theoretisch möchtest, hast du ja bereits dargelegt - jetzt gehts an die praxis
ein einziger regulärer ausdruck der all das erfüllt was du möchtest scheint mir etwas utopisch bzw unnötig kompliziert und unverständlich, bzw wenig flexibel/erweiterbar - beschränke dich auch teilbereiche deines problems
wie schon erwähnt eignet sich dafür preg_replace besser als die erg-funktionen - imho noch sinnvoller wäre preg_replace_callback
ich würde mit "finde mit einem regulären ausdrück den inhalt jedes href-attributs eines a-elements" beginnen
tu dieses und teile dann deine fortschritte mit bzw schildere, wo genau dein problem liegt