Beat: RegExp gesucht

Beitrag lesen

index.php
index.php?kat_id=21
/?kat_id=25
?kat_id=25
Zudem gibt es noch einige andere Variablen wie z.B. die Seitenzahl:
?kat_id=25&page=2
Oder die Druckversion:
?kat_id=25&show=print

Aus diesen Pfadangaben möchte ich den Dateinamen der neuen HTML-Datei zusammenbauen und folglich auch sämtliche Links auf der Seite automatisch ersetzen lassen.

Willst du wirklich _Dateien_ unter diesen Namen im System _speichern_ oder willst du URI-Pfade für publizierte Ressource-Adressen zusammenbauen?

Ziel:
index.html
21.html
25_2.html // mit Seitenzahl
25_print.html // Druckversion

Der komplette HTML-Content liegt in einer Var namens $content vor.

Mein Ansatz (fürs erste):
$content=preg_replace("|?kat_id=(\d+)|","$1.html",$content);

Das heisst, deine Pfade haben keinerlei Delimiter.
Ich prophezeie dir übelsten Umgang mit dem Inhalt.
Da ich vermute, dass deine Pfade in einem bestimmten Kontext stehen:
Bsp. <a href="?kat_id=25&show=print">
solltest du diesen Kontext in dein Suchpattern einbeziehen.

Problem dabei ist:

  • es sind nicht immer alle Parameter (show, page, kat_id) vorhanden.
  • manchmal sind die Parameter leer (kat_id=&page=1)
    Wie könnte ich das lösen?

Löse es bevor du ersetzen musst. Erzeuge gar nicht erst Pfade, die du eh nicht willst.

Die Lösung heisst eigentlich: Matche auf den Context, und überführe den Inhalt via callback Funktion an eine sub, welche sich der Details annimmt.

-> preg_replace_callback()

Du hast übrigens nicht gesagt, ob das eine einmalige Umbau-Aktion ist, oder ob du die CPU permanent verbraten willst.

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische