Felix Riesterer: (PHP) verstehe meine regexp nimmer...

Beitrag lesen

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.