Wie der Zufall es so will hab ich einen ähnlichen Parser auch selbst geschrieben. Allerdings hab ich bei mir (mehr oder weniger) umfangreichere Prozeduren genutzt da ich mit regex irgendwie immer noch nicht so gut klar komme. Allerdings funktioniert der angehängte Parser bei mir gar nicht. Das heißt er funktioniert schon, nur es kommt mitten drin eine Fehlermeldung. Ich poste mal die Stelle vielleicht sieht ja jemand den Fehler.
|
PHP Source code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
public static function firstPass($text,$randid)
{
return nl2br(preg_replace(Array
(
'!\\[b\\](.*?)\\[/b\\]!s',
'!\\[i\\](.*?)\\[/i\\]!s',
'!\\[u\\](.*?)\\[/u\\]!s',
'!\\[strong\\](.*?)\\[/strong\\]!s',
'!\\[google\\]\s*(.*?)\s*\\[/google]!s',
'!\\[url=([a-zA-Z0-9]*://.*?)\\]\s*(.*?)\s*\\[/url\\]!s',
'!\\[size=(\\d{1,2})\\](.*?)\\[/size\\]!s',
"!\\[img\\]\s*(?<!\\[url:$randid\\])(.*?)\s*\\[/img\\]!s",
'!\s((?:http|ftp)://\\S*)!',
),Array
(
"[b:$randid]\\1[/b:$randid]",
"[i:$randid]\\1[/i:$randid]",
"[u:$randid]\\1[/u:$randid]",
"[strong:$randid]\\1[/strong:$randid]",
"[google:$randid]\\1\"[tagend:$randid]\\1[/google:$randid]",
"[url:$randid]\"\\1\"[tagend:$randid]\\2[/url:$randid]",
"[size:$randid]\"font-size:\\1pt\"[tagend:$randid]\\2[/size:$randid]",
"[img:$randid]src=\"\\1\"[stagend:$randid]",
" [url:$randid]\"\\1\"[tagend:$randid]\\1[/url:$randid]",
),htmlentities($text)));
}
|
Die Fehlermeldung die kommt lautet
Warning: preg_replace() [function.preg-replace]: Unknown modifier '\' in /path/2/website/bbcode.php on line 67
und in dieser Zeile findet man
|
PHP Source code
|
1
|
),htmlentities($text)));
|
Im Quelltext ist an der Stelle also kein Slash. Ich steh da grade total auf dem Schlauch.
Ich würde die Klasse gerne um Smilies usw. erweitern und ein wenig umbauen nur dafür sollte das Grundgerüst erst mal klappen
EDIT: Ich hab den Fehler gefunden aber bin mir nicht sicher wie das zu beheben ist. Problem an der Sache ist, dass ich diese Zeile bzw. den enthalten regex nicht gelesen bekomme.
|
PHP Source code
|
1
|
"!\\[img\\]\s*(?<!\\[url:$randid\\])(.*?)\s*\\[/img\\]!s",
|
Mitten in dieser Zeile ist der Delimiter ! vorhanden was wohl dazu führt das die darauf folgenden Zeichen als Modifier interpretiert werden.