meerdere ubb code's
Ik heb even een klein vraagje.
Ik heb ontdekt dat ik geen 2 quote's tussen elkaar kan doen kan iemand me misschien vertellen hoe ik dit oplos?
ik heb dit als script nu
Code (php)
1
2
3
2
3
$bericht = preg_replace ("/\[quote](.*)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\1</td></tr></table>",$bericht);
$bericht = preg_replace ("/\[quote=(.*)](.*)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\2</td></tr></table>",$bericht);
$bericht = preg_replace ("/\[quote=(.*)](.*)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\2</td></tr></table>",$bericht);
Alvast bedankt
Groeten Nomis
topic even.
Bekijk dit Oke :) Bedankt, alleen als ik hem nu niet sluit(1 quote) dan crasht me hele website...
Je kan ook tags die niet met elkaar matchen verwijderen voordat ze door de parser gaan.
Ik kan eigenlijk niet bedenken hoe ik dat dan zou moeten doen?
Toevallig dat ik bezig ben om een ubb parser te maken. Wanneer deze klaar is (ik verwacht binnen nu en paar daagjes) zal ik em misschien hier op phphulp zetten
Die ? maakt het verschil tussen greedy (zoveel mogelijk) en non-greedy. Die tweede zal dus ook je eerste eind-quote meenemen in z'n match, op zoek naar de laatste eind-qoute, de eerste stopt al zodra hij de volgende eind-quote tegenkomt.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Code (php)
1
2
3
2
3
$bericht = preg_replace ("/\[quote](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\1</td></tr></table>",$bericht);
$bericht = preg_replace ("/\[quote=(.*?1)](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\2</td></tr></table>",$bericht);
$bericht = preg_replace ("/\[quote=(.*?1)](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\2</td></tr></table>",$bericht);
alleen het werkt niet.... ik zie nogsteeds 1 quer heb ik iets fout gedaan?
(.*?1) die 1 moet daar weg.
maar toch bedankt voor het helpen
dit script gebruik ik:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$bericht = '[quote]dit is de buitenste quote[quote]dit is de binnenste[/quote][/quote]';
$bericht = preg_replace ("/\[quote](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\1</td></tr></table>",$bericht);
$bericht = preg_replace ("/\[quote=(.*?)](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\2</td></tr></table>",$bericht);
echo $bericht;
?>
$bericht = '[quote]dit is de buitenste quote[quote]dit is de binnenste[/quote][/quote]';
$bericht = preg_replace ("/\[quote](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\1</td></tr></table>",$bericht);
$bericht = preg_replace ("/\[quote=(.*?)](.*?)\[\/quote\]/","<br /><table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto'>\\2</td></tr></table>",$bericht);
echo $bericht;
?>
je kan hem hier zelf bekijkne:
http://habboking.zesnul.nl/paginaadmin/test.php
Gewijzigd op 01/01/1970 01:00:00 door Simon Kroes
Maar hoe dit precies gaat met greedy en non-greedy weet ik niet. Je wilt immers wel hebben dan de buitenste quote alles daarbinnen ook meeneemt, maar je wilt niet dat quote 1 quote 2 (die ernaar komt) ook meeneemt:
edit: Misschien is het het makkelijkst om alles te matchen waarbinnen geen begin- en eind-quote voorkomt, zodat hij van binnenuit begint, en dan langzamerhand alle quotes netjes afwerkt. Iets a la
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
preg_replace ook een $count variabele kan gebruiken. Lekker makkelijk:
$count bevat nadat preg_replace is uitgevoerd het aantal quotes dat is vervangen per keer ($count wordt by reference meegegeven, zie de handleiding van preg_replace) en zolang dat aantal groter is dan 0 gaan we door.
Ik zie net dat Code (php)
1
2
3
4
5
2
3
4
5
<?php
do {
$bericht = preg_replace('...', '...', $bericht, -1, $count);
} while($count > 0);
?>
do {
$bericht = preg_replace('...', '...', $bericht, -1, $count);
} while($count > 0);
?>
$count bevat nadat preg_replace is uitgevoerd het aantal quotes dat is vervangen per keer ($count wordt by reference meegegeven, zie de handleiding van preg_replace) en zolang dat aantal groter is dan 0 gaan we door.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function makeQuote($tekst)
{
$regex = '#\[quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?]'.
'((?:[^[]|\[(?!/quote]|quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?])|(?R))+)'.
'\[/quote]#';
if (is_array($tekst)) {
$tekst = '<fieldset style="background-color:#FFF; width:95%;">
<legend style="background-color:#FFF;">Quote'.(empty($tekst[1]) ? '' : ': '.$tekst[1]).'</legend><p>'.$tekst[2].'</p></fieldset>';
}
return preg_replace_callback($regex, 'makeQuote', $tekst);
}[/code]
function makeQuote($tekst)
{
$regex = '#\[quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?]'.
'((?:[^[]|\[(?!/quote]|quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?])|(?R))+)'.
'\[/quote]#';
if (is_array($tekst)) {
$tekst = '<fieldset style="background-color:#FFF; width:95%;">
<legend style="background-color:#FFF;">Quote'.(empty($tekst[1]) ? '' : ': '.$tekst[1]).'</legend><p>'.$tekst[2].'</p></fieldset>';
}
return preg_replace_callback($regex, 'makeQuote', $tekst);
}[/code]
Gewijzigd op 01/01/1970 01:00:00 door Dos Moonen
Het is gelukt.
Iedereen anders ook natuurlijk bedankt:D maar die van Jelmer gebruik ik:)
Edit:
Als ik enters gebruik zoals zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$bericht = '[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
[/quote]
[/quote]';
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
[/quote]
[/quote]';
dan krijg ik dit effect: weet iemand misschien hoe dat komt??
http://habboking.zesnul.nl/paginaadmin/test.php
tot zo ver heb ik dit:
Code (php)
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
27
28
29
30
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
27
28
29
30
<?php
$bericht = '[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
[/quote]
[/quote]';
do {
$bericht = s_replace ("/\[quote](.*?)\[\/quote\]/","<table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;' align='left'>Quote </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto' align='left'>\\1</td></tr></table><br />", $bericht, -1, $count);
} while($count > 0);
do {
$bericht = preg_replace ("/\[quote=(.*?)](.*?)\[\/quote\]/","<table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;' align='left'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto' align='left'>\\2</td></tr></table><br />", $bericht, -1, $count);
} while($count > 0);
echo $bericht;
?>
$bericht = '[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
[/quote]
[/quote]';
do {
$bericht = s_replace ("/\[quote](.*?)\[\/quote\]/","<table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;' align='left'>Quote </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto' align='left'>\\1</td></tr></table><br />", $bericht, -1, $count);
} while($count > 0);
do {
$bericht = preg_replace ("/\[quote=(.*?)](.*?)\[\/quote\]/","<table cellspacing='0' width='97%' align='center'><tr><td style='background: #E4EAF2; border: 1px dotted #000; border-bottom: 0; border-left: 4px solid #8394B2; color: #000; font-weight: bold; font-size: 10px; margin: 8px auto 0 auto; padding: 3px;' align='left'>Quote: \\1 </td></tr><tr><td style='background: #FAFCFE; border: 1px dotted #000; border-left: 4px solid #8394B2; border-top: 0; color: #465584; padding: 4px; margin: 0 auto 8px auto' align='left'>\\2</td></tr></table><br />", $bericht, -1, $count);
} while($count > 0);
echo $bericht;
?>
Gewijzigd op 01/01/1970 01:00:00 door Simon Kroes
Daar allemaal rekening mee gehouden, kom ik tot dit (en dit is echt een monster, en niet mooi, en zo zou ik het zelf niet willen doen, maar het werkt wel)
Code (php)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php
function _quote_callback($matches)
{
$quote = '<blockquote>';
if($matches['bron'] != '')
$quote .= '<span class="bron">Van ' . $matches['bron'] . ':</span><br>';
$quote .= $matches['inhoud'];
$quote .= '</blockquote>';
return $quote;
}
$bericht = '
[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote=van hem]dit is de buitenste quote met naam
[quote=van ONSSSS]dit is de buitenste quote met naam
[quote=van mij]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
maar nu komt er nog een quote
[quote][quote]spannend he?[/quote], zei hij[/quote]
[/quote]
[/quote]';
do {
/* preg_replace_callback, omdat <bron> optioneel is. Ik weet niet hoe je een
soort if-constructie in het tweede argument van preg_replace bouwt, daarom
doe ik dat nu in een gewone PHP functie */
$bericht = preg_replace_callback("{\[quote(?:=(?<bron>[^\]]+?))?\](?<inhoud>(?:(?!\[/?quote(?:=.+?)?\]).)+?)\[/quote\]}is", '_quote_callback', $bericht, -1, $count);
/* Dit kan weg, was alleen even handig om te zien welke volgorde er precies gebruikt wordt */
echo "\n\n---------------------------------\n\n";
echo $bericht;
usleep(500000);
} while($count > 0);
?>
function _quote_callback($matches)
{
$quote = '<blockquote>';
if($matches['bron'] != '')
$quote .= '<span class="bron">Van ' . $matches['bron'] . ':</span><br>';
$quote .= $matches['inhoud'];
$quote .= '</blockquote>';
return $quote;
}
$bericht = '
[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote=van hem]dit is de buitenste quote met naam
[quote=van ONSSSS]dit is de buitenste quote met naam
[quote=van mij]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
maar nu komt er nog een quote
[quote][quote]spannend he?[/quote], zei hij[/quote]
[/quote]
[/quote]';
do {
/* preg_replace_callback, omdat <bron> optioneel is. Ik weet niet hoe je een
soort if-constructie in het tweede argument van preg_replace bouwt, daarom
doe ik dat nu in een gewone PHP functie */
$bericht = preg_replace_callback("{\[quote(?:=(?<bron>[^\]]+?))?\](?<inhoud>(?:(?!\[/?quote(?:=.+?)?\]).)+?)\[/quote\]}is", '_quote_callback', $bericht, -1, $count);
/* Dit kan weg, was alleen even handig om te zien welke volgorde er precies gebruikt wordt */
echo "\n\n---------------------------------\n\n";
echo $bericht;
usleep(500000);
} while($count > 0);
?>
Ik heb preg_replace_callback gebruikt om de matches op te maken (je moet er zelf even je tabel-structuur in zetten als je dat wilt) maar dat is nodig omdat ik niet zou weten hoe je anders één vervanger voor twee verschillende quotes (met bron, zonder bron) kunt gebruiken.
(Voor wie het interesseert, een echt mooie UBB parser zou eerst $bericht volledig parsen en omzetten in een boom, en op basis van die boom weer HTML genereren. In weze heb je dan gewoon je eigen HTML parser geschreven die er een DOM tree van bouwt, maar dan voor UBB. Ik denk wel dat dat veiliger is trouwens, en veel meer mogelijkheden biedt voor foutcorrectie en andere slimme trucjes)
Edit: newlines matchen met de punt doe je trouwens door s als modifier (na je laatste slash) op te geven.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Het is naar mijn menig een stuk mooier dat de code van Jelmer (niets persoonlijks), maar nog altijd niet zo fijn als een stack-based ubb parser.
Een test waarbij de inhoud van $bericht ietsjes anders is dan die uit Jelmers code. (er zijn quotes en enters toegevoegd)
De fieldset veranderen naar een tabel zou niet moeilijk moeten zijn.
Ook werkt de regexp al recursief door "(?R)".
De htmlspecialchars zit er in omdat je pas ubb tags gaat parsen nadat je alle html onschadelijk hebt gemaakt en dus (waarschijnlijk) de html varianten van quotes in de regexp moet gebruiken.
Code (php)
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
$bericht = '
[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote=\'van hem\']dit is de buitenste quote met naam
[quote="van ONSSSS"]dit is de buitenste quote met naam
[quote="van mij"]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit
is
de
buitenste
quote
met
naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
maar nu komt er nog een quote
[quote][quote]spannend he?[/quote], zei hij[/quote]
[/quote]
[/quote]';
function makeQuote($tekst)
{
$regex = '#\[quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?]'.
'((?:[^[]|\[(?!/quote]|quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?])|(?R))+)'.
'\[/quote]#';
if (is_array($tekst)) {
$tekst = '<fieldset style="background-color:#FFF; width:95%;">
<legend style="background-color:#FFF;">Quote'.(empty($tekst[1]) ? '' : ': '.$tekst[1]).'</legend><p>'.$tekst[2].'</p></fieldset>';
}
return preg_replace_callback($regex, 'makeQuote', $tekst);
}
echo makeQuote(nl2br(htmlspecialchars($bericht, ENT_QUOTES)));
?>
$bericht = '
[quote=Nomis3]
[quote]
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote=\'van hem\']dit is de buitenste quote met naam
[quote="van ONSSSS"]dit is de buitenste quote met naam
[quote="van mij"]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit is de buitenste quote met naam
[quote]dit
is
de
buitenste
quote
met
naam[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]
[/quote]dit is de buitenste quote met naam
maar nu komt er nog een quote
[quote][quote]spannend he?[/quote], zei hij[/quote]
[/quote]
[/quote]';
function makeQuote($tekst)
{
$regex = '#\[quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?]'.
'((?:[^[]|\[(?!/quote]|quote(?:\h*=\h*(?|"(.*?)"|&\#039;(.*?)&\#039;|([^][=\s]+)))?])|(?R))+)'.
'\[/quote]#';
if (is_array($tekst)) {
$tekst = '<fieldset style="background-color:#FFF; width:95%;">
<legend style="background-color:#FFF;">Quote'.(empty($tekst[1]) ? '' : ': '.$tekst[1]).'</legend><p>'.$tekst[2].'</p></fieldset>';
}
return preg_replace_callback($regex, 'makeQuote', $tekst);
}
echo makeQuote(nl2br(htmlspecialchars($bericht, ENT_QUOTES)));
?>
Bedankt iedereen!
Alleen waar je hierna heengaat is een stack based UBB parser, en daar zijn er wel van te vinden.
En regex master Richard heeft zijn versie hier ook gepost volgens mij...