Wie kann man es machen?

RaverHH

Mitglied
Hi Leutz,

ich habe eine function erstellt, die einen String nach bestimmten Links durchsucht, diese ändert und anschließend wieder als neuen String ausgibt.

Die Function läuft jetzt fehlerfrei. Doch nun möchte ich diese in meiner index Datei einbauen.

Die index Datei includet verschiedene andere Dateien, wie head,body und foot (body ist variabel). Der gesamte Inhalt wird mit ob_start() gepuffert und erst am Ende der Index-Datei ausgegeben.

Die Funktion soll jetzt den gesamten (aktuellen) Seiteninhalt erhalten und entsprechende Links ändern und erst wenn dies geschehen ist, an den Browser ausgeben. Mit ob_get_contents() kann ich mir ja den Pufferinhalt in einen String geben lassen.

Doch wie kann ich den geänderten Inhalt an den Puffer zurück geben, damit dieser dann ausgegeben wird
 
Du könntest mit [phpf]ob_end_clean[/phpf] die Ausgabepufferung deaktivieren und gleichzeitig den Puffer leeren. Anschließend startest Du mit [phpf]ob_start[/phpf] die Ausgabepufferung erneut und gibst mit echo den neuen Inhalt (in den Puffer) aus.

snuu
 
Ach Du meinst, den Inhalt der Seite in einen String übergeben, dann den Puffer leeren, die Funktion ausführen lassen und anschließend erneut ausgeben?

Bsp.:

1. ob-start()
2. alles einlesen(head,body;foot)
3. $string=ob_get_contents()
4. ob_end_clean()
5. ob_start()
6. echo function($string)
7. ob_end_flush()

Meinst Du so? Könnte funktionieren :-)
 
Es funktioniert,

doch jetzt scheint meine Funktion es nicht richtig umzusetzen. Ich poste sie mal:
PHP:
function save_link($string){
	if(preg_match("/([a-z]+)(\.)([a-z]+)\?open=([a-z]+)&get=([a-z_]+)&([a-z_]+)=([a-z0-9_]+)/i",$string,$id)){
	    $id[6]=base64_encode($id[6]);
	    $zuf=mt_rand(0,9);
	    $id[7]=($id[7]*$zuf).$zuf;
    $string=preg_replace("/([a-z]+)(\.)([a-z]+)\?open=([a-z]+)&get=([a-z_]+)&([a-z_]+)=([a-z0-9_]+)/i","$id[1]/$id[4]/$id[5]/$id[6]/$id[7].$3",$string);
	}
	if(preg_match("/([a-z]+)(\.)([a-z]+)\?open=([a-z]+)&get=([a-z_]+)/i",$string,$get)){
	$string=preg_replace("/([a-z]+)(\.)([a-z]+)\?open=([a-z]+)&get=([a-z_]+)/i","$get[1]/$get[4]/$get[5].$get[3]",$string);
	}
	if(preg_match("/([a-z]+)(\.)([a-z]+)\?open=([a-z]+)/i",$string,$op)){
	$string=preg_replace("/([a-z]+)(\.)([a-z]+)\?open=([a-z]+)/i","$op[1]/$op[4].$op[3]",$string);
	}
	if(preg_match("/([a-z]+)(\.)([a-z]+)/i",$string,$one)){
	$string=preg_replace("/([a-z]+)(\.)([a-z]+)/i","$1.$3",$string);
	}
return $string;
}

Sie soll praktisch alle Links wie
start.html?open=home
abändern in
start/home.html
 
Ich hab nochmal nachgeschaut, was er macht. Er nimmt den ersten Link, ändert Ihn entsprechend der Funktion und ersetzt alle weiteren Links mit diesem.

D.h.

Link1 original: start.html?open=home
nachher: start/home.html

Link2 original: start.html?open=user
nachher: start/home.html
Woran könnte es liegen? Wo ich es erst getestet hatte, da funktionierte es.
 
Zurück