In een website die ik aan het maken ben heb ik een uitleg over de "soort" bbcode die ik gebruik.
De functie die deze code parsed is
Nou wil ik op een pagina verschillende soorten combineren. Dit is de bbcode:
Om de regeleinden netjes te krijgen wordt nl2br uitgevoerd voordat de bbcode naar de function bbcode wordt omgeleid.
Voor de leesbaarheid is het mogelijk om enters te plaatsen in de [route.list], de [list] en de [sublist] tag. Omdat deze normalitair alleen op een speciale pagina worden gebruikt is dit geen probleem. Er wordt dan gewoon geen nl2br over de input gehaald.
Nou wil mijn opdrachtgever dus de boel wél samen gaan gebruiken, waardoor de hele <ul> tags (in de HTML) vol staan met <br /> tags die er niet horen en het hele CMS in de war gooien (de layout iig).
nou dacht ik dit op met de volgende regel in bbcode() op te lossen
Helaas stript deze de <br /> tags er niet netjes uit (deze regel staat vóór de return, dus er zijn <br /> tags aanwezig.
Ik heb geen idee meer hoe ik dit anders kan doen en ik ben er al dik twee uur mee bezig.
Weet iemand misschien hoe de reguliere expressie verandert moet worden zodat de <br /> in een <ul> tag netjes wordt gestript? (totaal andere oplossing is ook welkom.
De functie die deze code parsed is
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
| #direction 1 parsed bbcode naar html #direction 2 parsed html naar bbcode (depaced) #direction 3 verwijdert bbcode in een voorvertoning (slechts aantal tags) function bbcode($input,$direction = 1) { #verwijderen regeleinden $input = str_replace("\r\n",'',$input); if($direction == 1) { #We gaan bbcode omzetten in html $aToReplace = array('/\[b\](.+?)\[\/b\]/','/\[i\](.+?)\[\/i\]/','/\[u\](.+?)\[\/u\]/','/\[url=(http:\/\/)*(.+?)\](.+?)\[\/url\]/','/\[url\](http:\/\/)*(.+?)\[\/url\]/','/\[pagebreak\]/','/\[list\](.+?)\[\/list\]/','/\[sublist\](.+?)\[\/sublist\]/','/\[\*\](.+?)\[\/\*\]/','/\[enter]/','/\[route\.item\](.+?)\[\/route\.item\]/','/\[route\.list\](.+?)\[\/route\.list\]/'); $aReplacement = array('<b>\\1</b>','<i>\\1</i>','<u>\\1</u>','<a href="http://\\2" target="_blanc" title="\\3">\\3</a>','<a target="_blanc" href="http://\\2">\\2</a>','<p class="pagebreak"></p>','<ul class="voorwaarden_list">\\1</ul>','<li><ul class="voorwaarden_sublist">\\1</ul></li>','<li>\\1</li>','','<h3 class="routebeschrijving_beschrijving">\\1</h3>','<ul class="routebeschrijving_list">\\1</ul>','<ul\\1\\2</ul>'); } elseif($direction == 2) { #We zetten html om in bbcode. depraced, maar zonde om weg te gooien $aToReplace = array('/\<b>(.*)?<\/b>/','/\<i>(.*)?<\/i>/','/\<u>(.*)?<\/u>/','/\<a href="(.*)?" target="_blanc" title="(.*)?">(.*)?<\/a>/','/\<a target="_blanc" href="(.*)?">(.*)?<\/a>/','/\<p class="pagebreak"><\/p>/','/\<ul class="voorwaarden_list">/','/\<\/ul>/','/\<ul class="voorwaarden_sublist">/','/\<\/ul>/','/\<li>/','/\<\/li>/'); $aReplacement = array('[b]\\1[/b]','[i]\\1[/i]','[u]\\1[/u]','[url=\\1]\\2[/url]','[url]\\1[/url]','[pagebreak]','[list]','[/list]','[sublist]','[/sublist]','[*]','[/*]'); } elseif($direction == 3) { #We strippen bbcode voor een voorvertoning #We laten de vervaning voor [url], [url=*] en [pagebreak] weg. Deze worden dan gewoon leeggelaten $aToReplace = array('/\[b\](.+?)\[\/b\]/','/\[i\](.+?)\[\/i\]/','/\[u\](.+?)\[\/u\]/','/\[url=(http:\/\/)*(.+?)\](.+?)\[\/url\]/','/\[url\](http:\/\/)*(.+?)\[\/url\]/','/\[pagebreak\]/','[list]','[/list]','[sublist]','[/sublist]','[*]','[/*]'); $aReplacement = array('\\1','\\1','\\1'); } else return FALSE; $output = preg_replace($aToReplace,$aReplacement,$input); return $output; } |
Nou wil ik op een pagina verschillende soorten combineren. Dit is de bbcode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [b]Dit is een voorbeeld en een test van onze BBCode[/b] Dit is een [i]test[/i] van de [u]geheime[/u] functies van [url]www.rogierslag.be[/url] Straks presenteren we vol trots onze [url=http://www.rogierslag.be]nieuwe website[/url]! De route is niet zo moeilijk: We hebben wel een aantal voorwaarden: [list] [*]De bedingen in deze algemene voorwaarden zijn mede gemaakt ten behoeve van de maten van *, de bestuurders van de praktijkvennootschappen en van al diegenen die voor de maatschap werkzaam zijn.[/*] [sublist] [*]Alle opdrachten worden uitsluitend aanvaard en uitgevoerd door de maatschap*. De toepasselijkheid van de artikelen 7:404 en 7:407 lid 2 BW wordt uitdrukkelijk uitgesloten.[/*] [*]Het staat * vrij verleende opdrachten onder haar verantwoordelijkheid door de door haar aan te wijzen bestuurders van praktijkvennootschappen, maten en personeelsleden van * te laten uitvoeren, in voorkomend geval met inschakeling van hulppersonen en derden.[/*] [/sublist] [/list] [route.item]Vanuit de richting Eindhoven:[/route.item] [route.list] [*]Neem de afslag Weert-Noord richting Weert.[/*] [*]Vervolgens vervolgt u deze weg (de Eindhovenseweg), in de richting van het centrum van Weert, tot aan de tweede rotonde. [/*] [*]Bij de tweede rotonde rijdt u naar rechts de Schoutlaan op, waarna u het kantoor aan de linker zijde aantreft.[/*] [/route.list] |
Om de regeleinden netjes te krijgen wordt nl2br uitgevoerd voordat de bbcode naar de function bbcode wordt omgeleid.
Voor de leesbaarheid is het mogelijk om enters te plaatsen in de [route.list], de [list] en de [sublist] tag. Omdat deze normalitair alleen op een speciale pagina worden gebruikt is dit geen probleem. Er wordt dan gewoon geen nl2br over de input gehaald.
Nou wil mijn opdrachtgever dus de boel wél samen gaan gebruiken, waardoor de hele <ul> tags (in de HTML) vol staan met <br /> tags die er niet horen en het hele CMS in de war gooien (de layout iig).
nou dacht ik dit op met de volgende regel in bbcode() op te lossen
PHP:
1
| $output = preg_replace('/\<ul(.+?)>(.+?)<br \/>(.+?)<\/ul>/','<ul\\1>\\2\\3</ul>',$output); |
Helaas stript deze de <br /> tags er niet netjes uit (deze regel staat vóór de return, dus er zijn <br /> tags aanwezig.
Ik heb geen idee meer hoe ik dit anders kan doen en ik ben er al dik twee uur mee bezig.
Weet iemand misschien hoe de reguliere expressie verandert moet worden zodat de <br /> in een <ul> tag netjes wordt gestript? (totaal andere oplossing is ook welkom.