Hi seth,
ich fühle mich gelobt, und daher sehr geschmeichelt. :-))
Ich muss jetzt nur noch herausfinden für welche Dateitypen ich die relativen Verweisziele auch nicht korrigiert haben will...
dafuer musst du bloss den teil ([^>" ]*") abaendern, z.b. werden vom folgenden muster nur verweise zugelassen, die auf htm(l) oder php enden:
([^>" ]*(?:html|htm|php)")
Das ist _wirklich_ _große_ _klasse_!!
Damit kann ich zuverlässig alle meine Verweise auf HTML-Dokumente "korrigieren", so dass deren Body-Bereich in meiner index.php geparst (und gesäubert!) angezeigt werden kann.
Nun habe ich versucht, die Verweise auf nicht-HTML-Dateien (also alles, was nicht htm(l) als Dateiendung hat) nur in der Pfadangabe zu korrigieren, da ja diese Links weiterhin wie in der originalen HTML-Datei funktionieren sollen.
Ich habe diese ganze Programmzeile hinzugefügt:
$html_body=preg_replace('/((?i)href=")(?!(?:mailto:|http:))([^>" ]*(?!(?:html|htm))")/', '\1'.$ref_korrektur.'\2', $html_body);
Allerdings lässt dieser Ausdruck die Finger nicht von htm(l)-Dateien... Ich dachte, ich modifiziere den von Dir vorgeschlagenen Bereich
([^>" ]*(?:html|htm|php)")
in meiner neuen Programmzeile nach
([^>" ]*(?!(?:html|htm))")
was ja syntaktisch genauso funktioniert, wie der Ausschluss von mailto: und http: -Adressen (ist das nicht negative lookahead?)
Irgendwas klemmt da aber noch, da durch diese Programmzeile bereits "korrigierte" Links nocheinmal modifiziert werden...
Hier mein Ausschnitt aus dem Programm:
// Referenzierungen korrigieren
// Bildquellen "reparieren"
$html_body=preg_replace('/((?i)src=)"?([^>" ]*)"?/', '\1"'.$ref_korrektur.'\2"', $html_body);
// Verweisziele "reparieren"
// sorge dafür, dass Verweisziele in Anführungszeichen stehen
$html_body=preg_replace('/href=([^"> ]+)([> ])/', 'href="\1"\2', $html_body);
// korrigiere Verweise auf alle Dateitypen deren Endung nicht htm(l) ist, ohne sie über die index.php laufen zu lassen
$html_body=preg_replace('/((?i)href=")(?!(?:mailto:|http:))([^>" ]*(?!(?:html|htm))")/', '\1'.$ref_korrektur.'\2', $html_body);
// verbiege Verweisziele auf HTML-Dateien mit der Endung htm(l), damit sie über die index.php ausgelesen werden
$html_body=preg_replace('/((?i)href=")(?!(?:mailto:|http:))([^>" ]*(?:html|htm)")/', '\1index.php?aktion=informationen&thema='.$ref_korrektur.'\2', $html_body);
Hmm... ich werde morgen daran weiterprobieren.
Jedenfalls Dir ganz großen Dank, denn Du hast mir viel Stoff zum Durchdenken und Nachverstehen gegeben.
Liebe Grüße aus Ellwangen,
Felix Riesterer.