Teilstring aus Text ermitteln und ersetzen

marygo

Grünschnabel
Hej,

ich möchte per Redaktionssystem beliebigen Text mit beliebig vielen Links eingeben können.
Die Links sollen per [link] [/link] gekennzeichnet werden, wobei dazwischen die URL ohne "http://" stehen darf.

Beispiel:
"Hallo ich bin ein Hinweis auf: [link]www.blar.de[/link]. Und der nächste folgt sofort siehe [link]www.hier.de[/link]. Und so weiter..."

Ich brauche also erstmal alle Teilstrings von "[link]" bis "[/link]" und dann separiert, was dazwischen steht.

Wie gehe ich da vor? Mit strpos u.s.w.?

Fals hierfür ein regulärer Ausdruck in Frage kommt, wäre ich dankbar für jeden Hinweis - ich kapier die einfach nicht ;[

Vielen Dank!
mary*
 
Ich denke du suchst genau das hier :

Wenn du die Linken möchtest, dann wird es ein wenig schwerer, denn du musst bedenken, dass du 2 ersetzen musst. Einmal den Link selber und dann die Beschreibung.

Beispiel
Der htmlcode sieht so aus : <a href="http://www.meinedomain.de">Die Domain</a>

Jetzt musst du den Link ersetzen also http://www.meinedomain.de und die Beschreibung also Die Domain. Um etwas zu ersetzen gibt es einen einfachen Befehl in PHP

String str_replace("zu suchender Text","zu ersetzender Text",Die Variable wo der Text drin steht);

Ich würde es so machen. Um den Link einzugeben würde ich [link=www.meinedomain.de]Beschreibung[/link] machen. Im Code sieht das so aus.

$text = "[link=www.meinedomain.de]Meine Domain[/link]";
$text=strip_tags($text);
$text=str_replace("[link=","<a href=\"http://",$text);
$text=str_replace("[/link]","</a>",$text);
$text=str_replace("]",">",$text);

Erklärung:
1.Die erste Zeile ist der zu ersetzende Text.
2.In der zweiten Zeile holst du erst mal alle unerlaubten HTML Tags aus dem Text, damit keiner auf die Idee kommt Java oder inFrames aufzubauen.
3.Die dritte Zeile ersetzt den Text für dich und mach daraus den HTMLTag, der benötigt wird um den Link darzustellen.
4.Mach das gleiche nur mit dem Text [/link] und macht daraus </a>
5.Holt das letzte Zeichen raus und macht aus dem ] ein >

Du solltest die 5 Zeile auf jeden Fall als letztes machen sonst bekommst du Probleme
 
Das machst Du am besten mit regulären Ausdrücken.
Du kannst im Forum auch mal nach vbCode und bbCode suchen oder nach preg_replace.
Dann solltest Du genug Beispiele finden.
So geht es zum Beispiel ohne spezielle Kennzeichnung durch [ link ]:
PHP:
        $result = preg_replace( "=(^|\ |\\n)(www\.)([a-zA-Z0-9\.\/\-\_\?\=\&\%]{1,})=i", "\\1<a href=\"http://\\2\\3\" target=\"_blank\">\\2\\3</a> ", $result );
 
Zuletzt bearbeitet:
Hello und v i e l e n Dank!

Die Loesung von "BabyMitSchnully" ist vortrefflich, zumal sehr galant.
Danke auch fuer den praktischen Hinweis von "hpvw" - wird mir bestimmt in vielen anderen Situationen noch sehr helfen.
 
Fehlerkorrektur

Nachschlag:

kleiner Fehler in der 5. Zeile des ersten Lösungsansatzes:

statt: $text=str_replace("]",">",$text);

muss es heissen: $text=str_replace("]","\">",$text);

sonst hat das href-Attribut keine schliessenden Tütelchen.

LG,
mary*
 
Zurück