nl2br() voorkomen bij <pre>
Ik ben bezig met een forum met een UBB parser. Deze werkt al perfect. Wanneer men een bericht post wordt dit als UBB opgeslagen in de database.
Bij het weergeven van dit bericht wordt het pas geparsed, en wordt de functie nl2br() toegepast. Wanneer men de UBB tag [\code\] [\/code\] toepast, wordt dit geparsed naar de innerHTML <pre><code> </code></pre>. Aangezien dat je bij <pre> geen nl2br() nodig hebt, krijg je dubbele enters.
Is er hier een goede oplossing voor?
Gewijzigd op 01/01/1970 01:00:00 door Koen Bokern
geen <pre> gebruiken...
Dit moet je met regex doen, daar ben ik nog niet zo bekend mee, maar daarmee kan je alles ophalen wat tussen en staat. Daar zou je br2nl() kunnen gebruiken, maar ik denk dat er nog een handigere oplossing mogelijk moet zijn.
Robert: voor zo ver ik weet, bestaat de functie br2nl() niet...
str_replace('<br><br>', '<br>', $veld);
/i', "\\n", $text);
}
?>
gaat iets fout met de highlight :)
Ik de functie br2nl proberen :)
Big edit:
Het werkt dus niet helemaal, althans, ik weet niet hoe ik het erin moet gooien
Het zier er nu zo uit:
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
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
<?php
function br2nl($tekst) {
return preg_replace('/<br.*\/>/i', "\n", $tekst);
}
// Hieruit wordt alle UBB omgezet
//$pagina = $_POST['pagina'];
//$pagina = htmlspecialchars($pagina);
//$pagina = nl2br($pagina);
// Deze array zoekt de UBB codes
$find = array( // UBB
'#\[b\](.*?)\[/b\]#si',
'#\[u\](.*?)\[/u\]#si',
'#\[i\](.*?)\[/i\]#si',
'#\[CODE\](.*?)\[/CODE\]#si',
'#\[url=(.*?)\](.*?)\[/url]#si',
'#\[img \#left\](.*?)\[/img\]#',
'#\[img\](.*?)\[/img\]#',
'#\[clear\]#',
'#\[quote=(.*?)\](.*)\[/quote\]#'
);
// Deze array bevat alles waardoor de UBB wordt vervangen
$replace = array
('<b>\\1</b>',
'<u>\\1</u>',
'<i>\\1</i>',
'<pre><code><?php $code = " ?>\\1<?php "; $code2 = br2nl($code); ?></code></pre>',
'<a href="\\1">\\2</a>',
'<a href="\\1" border="0"><img border="0" src="\\1" title="image" alt="image" width="150" height="150" align="left" /></a>',
'<a href="\\1" border="0"><img border="0" src="\\1" title="image" alt="image" width="150" height="150" /></a>',
'<br clear="all">',
'<div class="quote_head">quoting: \\1</div><div class="quote">\\2</div>'
);
?>
function br2nl($tekst) {
return preg_replace('/<br.*\/>/i', "\n", $tekst);
}
// Hieruit wordt alle UBB omgezet
//$pagina = $_POST['pagina'];
//$pagina = htmlspecialchars($pagina);
//$pagina = nl2br($pagina);
// Deze array zoekt de UBB codes
$find = array( // UBB
'#\[b\](.*?)\[/b\]#si',
'#\[u\](.*?)\[/u\]#si',
'#\[i\](.*?)\[/i\]#si',
'#\[CODE\](.*?)\[/CODE\]#si',
'#\[url=(.*?)\](.*?)\[/url]#si',
'#\[img \#left\](.*?)\[/img\]#',
'#\[img\](.*?)\[/img\]#',
'#\[clear\]#',
'#\[quote=(.*?)\](.*)\[/quote\]#'
);
// Deze array bevat alles waardoor de UBB wordt vervangen
$replace = array
('<b>\\1</b>',
'<u>\\1</u>',
'<i>\\1</i>',
'<pre><code><?php $code = " ?>\\1<?php "; $code2 = br2nl($code); ?></code></pre>',
'<a href="\\1">\\2</a>',
'<a href="\\1" border="0"><img border="0" src="\\1" title="image" alt="image" width="150" height="150" align="left" /></a>',
'<a href="\\1" border="0"><img border="0" src="\\1" title="image" alt="image" width="150" height="150" /></a>',
'<br clear="all">',
'<div class="quote_head">quoting: \\1</div><div class="quote">\\2</div>'
);
?>
En dan roep ik het aan met:
Hoe moet ik br2nl() dan toepassen?
Gewijzigd op 01/01/1970 01:00:00 door Koen Bokern
Toch maar jouw UBB class geprobeerd :) super script... nice:)