Autor Beitrag
Mogtar
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 08.08.08 10:51 
Hallo,

ich habe folgenden HTML-Text:

ausblenden Quelltext
1:
2:
[ARTIKEL=9]hallo[/ARTIKEL=9] <br> 
[ARTIKEL=11]hallo[/ARTIKEL=11]


nun möchte ich diesen mit preg_replace parsen und ersetzen nach:

ausblenden Quelltext
1:
2:
<a href=index.php?show=artikel&id=9>hallo</a> <br> 
<a href=index.php?show=artikel&id=11>hallo</a>


mit

ausblenden Quelltext
1:
$text = preg_replace("#\[ARTIKEL=(.*)\](.*)\[\/ARTIKEL=(.*)\]#", "<a href=index.php?show=artikel&id=$1>$2</a>", $text);					


funktioniert das aber nur wenn ich ein Eintrag hab ala : "[ARTIKEL=9]hallo[/ARTIKEL=9] <br>"

bei zwei nimmt er dann: den anfang [ARTIKEL=9] und dann aber [/ARTIKEL=11] als ende.

wie muss der Suchsyntax aussehen ?

mfg,
Mogtar
Mogtar Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 08.08.08 12:32 
Die Lösung für dieses Problem ist:
Zitat:
(.*)
durch
Zitat:
(.*?)
ersetzen!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 08.08.08 17:34 
Die elegantere Lösung wäre:
1. (\d+) statt (.*?) im öffnenden Tag zu verwenden
2. Wie erwähnt Ungreedy (.*?) zu arbeiten
3. Mit Look Ahead absichern, dass der End-Tag nicht im zweiten Submatch enthalten ist.

Ach ja: Und ein Glück, dass ich [Artikel=42]<script>alert('XSS');</script>[/Artikel] schreiben darf als Artikelbeschreibung ;-)

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.