Seite 1 von 1
preg_replace - wer kann helfen?
Verfasst: 19.02.2004, 17:42
von WorstCase
Hallo,
ich möchte wegen mod_rewrite den Urlstring
in
umwandeln.
In der .htaccess ist das soweit klar.
Aber mit den regulären Ausrücken in PHP habe ich so meine Probleme (Anfänger).
Mit den Suchmustern für
preg_replace habe ich aber so meine liebe Mühe.
Habe zwar schon Tutorials und das PHP-Handbuch gelesen, aber vieles ist auf English und da bin ich schon einige Jahre aus der Übung.
Es wäre toll wenn mir jemand helfen könnte.
Gruß
WorstCase
Verfasst:
von
Hochwertiger Linkaufbau bei ABAKUS:
- Google-konformer Linkaufbau
- nachhaltiges Ranking
- Linkbuilding Angebote zu fairen Preisen
- internationale Backlinks
Wir bieten
Beratung und
Umsetzung.
Jetzt anfragen:
0511 / 300325-0
Verfasst: 19.02.2004, 19:25
von Nexus
eigentlich willst du in der .htaccess
in
umwandeln, oder

?
Was willst du jetzt konkret in php machen? Die Fragestellung ist mir noch nicht ganz klar

Verfasst: 19.02.2004, 19:33
von Southmedia
Die Fragestellung ist mir noch nicht ganz klar
Dem schliesse ich mich an... was willst du genau machen? Wo hakts?
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 19.02.2004, 19:48
von Angelina
glaub mal, mit dem Pattern der Funktion preg_replace haperts - oder ?
will ja wohl
"verwandeln" - in der .htaccess is ja soweit alles klar - oder ?
*/
?>
Verfasst: 19.02.2004, 19:56
von WorstCase
Über die .htaccces habe ich festgeleft welche html-Datei wie nach PHP umgesetzt werden soll. Das ist klar und kein Problem.
Jetzt habe ich aber in meinen Seiten Urls mit Parameteraufruf.
Diese Urls möchte ich jetzt über preg_replace in *.html umwandeln.
Ich kann nämlich nicht alle Links per Hand in *.html abändern.
Für das Nuke-System gibt es so etwas. Ich poste hier mal einen Teil der in den Header eingebunden wird.
ob_start();
function replace_for_mod_rewrite(&$s) {
$urlin = array(
"'(?<!/)modules.php\?name=News&file=article&sid=([0-9]*)'",
"'(?<!/)modules.php\?name=News&file=article&sid=([0-9]*)'"
);
$urlout = array(
"article\\1.html",
"article\\1.html"
);
$s = preg_replace($urlin, $urlout, $s);
return $s;
}
Nach diesem System möchte ich jetzt z.B. den Link
https://www.domain.de/datei.php?parameter=4711
in
https://www.domain/paramter4711.html umwandeln.
Ich hoffe ich habe es jetzt etwas klarer formuliert.
Gruß
Verfasst: 20.02.2004, 14:20
von WorstCase
@ Angelina
Ja, ich komme mit den Pattern nicht klar.
Gruß
Verfasst: 20.02.2004, 15:15
von Southmedia
Hallo WorstCase,
gehe ich richtig in der Annahme dass "parameter" immer Buchstaben sind, "Zahl" immer Ziffern? Poste doch einfach mal ein paar Beispiele deiner URLs. Sobald ich das weiss kann ich dir da was basteln.
Generell möchte ich hier noch anmerken dass du besser alle Links manuell umstellen solltest, die automatische Lösung kann nicht so gut funktionieren wie wenn man manuell alle Files durchsucht und die Links von Hand umschreibt. Wenn man ein gescheites Programm benutzt ist das auch gar nicht so viel Arbeit.
Verfasst: 20.02.2004, 15:53
von WorstCase
Verfasst: 20.02.2004, 16:23
von Southmedia
Code: Alles auswählen
<?
function replace_for_mod_rewrite(&$s) {
$s = preg_replace("'hotel.php\?([a-z]+)=([0-9]+)'", "\\1\\2.htm", $s);
return $s;
}
$url_pre = "Dies ist ein Beispieltext http://www.domain.de/hotel.php?land=12 der vor, nach und zwischen http://www.domain.de/hotel.php?stadt=301 den Links steht.";
echo $url_pre."<br />";
$url_new = replace_for_mod_rewrite($url_pre);
echo $url_new."<br />";
?>
Das habe ich mal kurz gebastelt, funktioniert auch so weit. Um das nun auf die komplette Seite anzuwenden solltest du diese in einen Buffer laden, diesen dann durch die Funktion jagen und dann ausgeben.
Das könnte so aussehen:
Code: Alles auswählen
<?
function replace_for_mod_rewrite(&$s) {
$s = preg_replace("'hotel.php\?([a-z]+)=([0-9]+)'", "\\1\\2.htm", $s);
return $s;
}
ob_start("replace_for_mod_rewrite");
?>
<!-- normaler Seiteninhalt... -->
Verfasst: 20.02.2004, 17:43
von Nexus
Du kannst die replace_for_mod_rewrite() auch direkt an den ob_start() hängen:
<?php
ob_start("replace_for_mod_rewrite");
?>
Diese wird dann vor der Ausgabe des Buffers austomatisch auf diesen angewand.
Verfasst: 20.02.2004, 17:57
von Southmedia
Optimal, ich habe es oben geändert. Sieht viel schöner aus so. Hab bisher kaum mit Outputbuffering gearbeitet. Gefällt mir aber so der Code.
Trotzdem will ich nochmal erwähnen dass es für den Server sicher gesünder wäre das ganze wirklich in den Dateien dauerhaft zu ersetzen.
Verfasst: 20.02.2004, 18:55
von WorstCase
@Southmedia u. Nexus
Ich bin beeindruckt.
Es funktioniert.

Herzlichen Dank für die prompte Lösung.
Ich hätte das mit meinen bescheidenen PHP-Kenntnissen nicht hinbekommen.
Das mit der manuellen Änderung der Urls kann ich erst später realisieren, aber Danke für den Tipp.
Gruß
WorstCase
Verfasst: 20.02.2004, 20:06
von Nexus
um solche Änderungen mit minimalen Aufwand machen zu können setzte ich bei allen Projekten wo Inhalte aus einer DB kommen wie es ja auch bei dir der Fall zu sein scheint zur Linkerzeigung eine funktion ein:
Code: Alles auswählen
function makeLink($id, $link, $class="deineDefaultCssKlasse", $additional='') {
return '<a href="'.hierIrgentwasMitDerIDMachen.'" class="'.$class.'" '.$additional.'>'.$link.'</a>';
}
Dann kannst du das aussehen aller Links an einer Stelle zentral ändern. Über die CSS-Klasse kannst du das aussehen des Links anpassen. Alternativ in $additional weitere Eigenschaften übergeben. 2 Beispiele (minimal, maximal)
Code: Alles auswählen
<?php
echo makeLink('3', 'Die Stadt 3');
echo makeLink('3', 'Die Stadt 3', 'StadtLink" 'style="color:#ffffff"');
?>