PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] eregi_replace Probleme



Pharao2k
08.07.2004, 13:40
Hiho Leutz,
Ich wollt mir so eine Art eigenen BBCode zusammenbauen und hab daher folgendes zusammengebaut:


$string = eregi_replace("(\[internlink:)(.*)(\])(.*)(\[/internlink\])","<a href=\"\\2\">\\4</a>",$string);
$string = eregi_replace("(\)(.*)(\[/externlink\])","<a href=\"\\2\" target=\"_blank\">\\4</a>",$string);
$string = eregi_replace("(\[grafik:)(.*)(\])","<img src=\"\\2\" alt=\"\\2\">",$string);

Info:

Leider hat es nicht so gut funktioniert wie ich eigentlich wollte, denn wenn ich z.B. das so gemacht habe:



[externlink:http://www.world-of-pc.de/images/chieftec/1879.jpg]Bild 1
[nl]
http://www4.tomshardware.com/howto/20030804/images/extreme_s.jpg[/url]]Bild 2


([nl] erzeugt Zeilenumbruch)

Der Link wurde erzeugt, allerdings hat er nur einen statt 2 Links erzeugt und die daraus folgende Adresse war:
http://www.world-of-pc.de/images/chieftec/1879.jpg%5DBild%201%5B/el%5D%3Cbr%3E%5Bel:http://www4.tomshardware.com/howto/20030804/images/extreme_s.jpg

was hab ich falsch gemacht? Ich hab schon versucht das ganze umzustrukturieren aber es kam immer das gleiche Problem zustande, weiss jemand woran das liegt?

Procyon
08.07.2004, 14:44
Tach erstmal

ich kann dir nicht sagen was bei dir falsch ist aber ich hab' mir mal Code aus dem PhpBB 2.x geklaut, weil ich mich mit regulären Ausdrücken nicht auskenne ...


function prepare_long_text_preg($text)
{
settype($text,"string");
$text = trim($text);
$text = htmlentities($text,ENT_QUOTES);
$text = nl2br($text);

// Fettdruck
$text = preg_replace
( "#\[b \](.*?)\[/b\]#si",
"<b>\\1</b>",
$text
);
// Unterstrichen
$text = preg_replace
( "#\[u \](.*?)\[/u\]#si",
"<u>\\1</u>",
$text
);
// Kursiv
$text = preg_replace
( "#\[i \](.*?)\[/i\]#si",
"<i>\\1</i>",
$text
);
// Bilder (xxxx://abiabi.de/intro.jpg)
$text = preg_replace
( "#\[img\]([\w]+?://[^ \"\n\r\t<]*?)\[/img\]#is",
"<img src=\"\\1\" alt=\"\" border=\"0\" />",
$text
);
// xxxx://abiabi.de/
$text = preg_replace
( "#\[url\]([\w]+?://[^ \"\n\r\t<]*?)\[/url\]#is",
"<a href=\"\\1\" target=\"_blank\">\\1</a>",
$text
);
// AbiAbi!!! (xxxx://abiabi.de)
$text = preg_replace
( "#\[url=([\w]+?://[^ \"\n\r\t<]*?)\](.*?)\[/url\]#is",
"<a href=\"\\1\" target=\"_blank\">\\2</a>",
$text
);
return($text);
} // ende prepare_long_text

da PhpBB unter der GPL steht tut es dieser Code wahrscheinlich auch (ich hab' größtenteils kopiert, nur ein paar kleine änderungen gemacht ...)

[EDIT]
scheiss UBB-Code!
die leerzeichen hinter dem [b, [i und [u musst du wieder wegmachen
ich musste sie reinsetzen da sie sonst als ubb-code interpretiert werden ...

Pharao2k
08.07.2004, 15:03
bei preg_replace ist das leider ne andere Syntax als bei iregi_replace, aber trotzdem danke für die Hilfe ich werd mal schauen ob ich das nich übernehme.

Pharao2k
08.07.2004, 19:46
weiss denn keiner Rat wie man das mit iregi_replace regeln kann?

Procyon
08.07.2004, 20:57
Tach erstmal

die Posix-sachen (ereg) sind doch langsamer als die perl-sachen (preg), wieso willst du unbedingt Posix benutzen?

Zur frage: nein, posix-kompatible reguläre ausdrücke kann ich auch nicht ...

Pharao2k
08.07.2004, 20:59
naja bei meinem Script ist die Performance nebensächlich und ich hab nu mit Hängen und Würgen grad mal Posix hinbekommen und will nich mich nochmal darin reinversetzen ^^ aber ok scheinbar werd ichs doch wagen müssen ;D