Text zwischen 2 definierten Tags komplett ersetzen

stega

Erfahrenes Mitglied
Hi,

ich habe folgendes Problem:

ich möchte in einem vorhandenen Text, in dem z.B. folgende 2 "Tags" sind, pre-user* am Anfang und *pre-user am Ende, den Text, der zwischen den beiden "tags" steht, komplett ersetzen lassen.
1) mit was kann ich das tun? ich hab schon mit replace gedacht, aber das is ja immer nur einzelne Wörter und der Text zwischen den beiden Wörtern variiert aber.
2) wie kann ich das machen, wenn das pre-user* und *pre-user im Text öfters vorkommt?

danke für eure Hilfe! :p

lg
 
heißt dass, ich muss das mit dem machen:
PHP:
 $startpos=strpos($messagetext,"[url=")+5;
        $endpos=strpos($messagetext,"]",$startpos);
        $url=substr($messagetext,$startpos,$endpos-$startpos);
?

wenn ja, muss es dann bei mir ungefähr so aussehen:
PHP:
 $startpos=strpos($messagetext,"\[user\]")+5;
        $endpos=strpos($messagetext,"\[/user\]",$startpos);
        $text=substr($messagetext,$startpos,$endpos-$startpos);
?

macht er dann den Text, den ich nicht haben will (also den zwischen jetzt hier und ) weg und kann was anderes hinschreiben?

und was mache ich, wenn ich mehrere -Bereiche habe?

geht das irgendwie eifnach nur mit php?

danke! meine letzte Hoffnung liegt hier begraben!
 
ja, aber ich will ja, dass alles zwischen (incl. und ) ersetzt wird.

Um bissle aufzuklären: es handelt sich um ein Webblog, bei dem bestimmte Teile des Eintrages jeweils nur von eingeloggten Usern gelesen werden dürfen. Das Script testet, ob session gesetzt ist. Sollte dies nicht der Fall sein, so sollen die für nichtangemeldete User "verbotenen" Inhalte (zwischen und beim Eintragen ins Blog) entfernt werden und stattdessen ein Hinweis da stehen.

Kann mir da jmd bitte helfen?

danke für die bisherien Vorschläge!
 
Ja aber mein Skript ersetzt ja nicht nur alles zwischen und sondern auch gleich und

Wenn es mit was anderem ersetzten willst kannst du ja den zweiten Parameter einfach anpassen:
PHP:
$str = preg_replace("!\[user\](.*?)\[/user\]!", "Nur angemeldete Benutzer dürfen das sehen", $str);
 
danke schön, das is genau, was ich gesucht hab....dieses Forum is einfach SPITZEEEEEE! schnell, immer ne Lösung und nette Leute, die einem helfen....super!
 
mist,
ich habs jetzt grad weiter ausprobiert und es klappt nicht mehr.
folgendes:
mein Text sieht bearbeitet jetzt so aus:

Code:
<font size="2" face="Georgia, Times New Roman">blablabla </font>[ user] <br /></p>
<p style="color: rgb(0, 0, 0);"> das kommen tags etc, text und so dinge hin.. .blababalbla
</font>&nbsp;&nbsp; [ /user] </p>

mein code sieht so aus:
PHP:
if (!isset($_SESSION["pw"]) && !isset($_SESSION["status"])) {
$text = preg_replace("!\[ user\](.*?)\[ /user\]!", "<i>- Inhalt angemeldeten Usern vorenthalten -</i>", $text); 
 }
 if (isset($_SESSION["pw"])) {
 $text = ereg_replace("\[ user\]","",$text);
 $text = ereg_replace("\[ /user\]","",$text);
 }

aber jetzt ersetzt er nichts mehr....warum das? liegt das an den Tags? hilffeee :(
 
Hi

probiers mal so:

PHP:
    $str = '<font size="2" face="Georgia, Times New Roman">blablabla </font>[ user] <br /></p>
<p style="color: rgb(0, 0, 0);"> das kommen tags etc, text und so dinge hin.. .blababalbla
</font>&nbsp;&nbsp; [ /user] </p>';
    $str = preg_replace("!\[ user\](.*?)\[ /user\]!is", "<i>- Inhalt angemeldeten Usern vorenthalten -</i>", $str);
echo $str;

Ich habs getestet und es hat funktioniert :-)
Ich habe noch zusätzlich die Flags i und s hinzugefügt:
i: Groß-und Kleinschreibung wird nichz beachtet (kannst du weglassen)
s: Zeichenkette wird als eine einzige Zeile betrachtet

Dazu auch: http://de.selfhtml.org/perl/sprache/regexpr.htm#flags
 
Zurück