BBcode naar HTML en andersom

  • Onderwerp starter Onderwerp starter yert
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

yert

Gebruiker
Lid geworden
13 mrt 2008
Berichten
19
Weet iemand een goed php-script waarmee je een string met bbcode om kan zetten naar een string met html-code en andersom.

Alvast bedankt
 
Verdiep je in de functie preg_replace(), die wordt voor het omzetten gebruikt.
 
Bedankt voor de reacties. Ik denk dat ik er nu wel uit kom.
 
$r[message] is wat verstuurd werd door een formulier.


$final_message = $r[message];
$final_message = str_replace("", "<strong>", $final_message);
$final_message = str_replace("
", "</strong>", $final_message);
$final_message = str_replace("", "<i>", $final_message);
$final_message = str_replace("
", "</i>", $final_message);
$final_message = str_replace("", "<img src=\"", $final_message);
$final_message = str_replace("", "\" />", $final_message);

Later word $final_message ge-echo'd op het scherm en worden alle tags omgezet in html.. hopelijk heb je er nog wat aan!
 
preg_replace() is hier toch wel veel efficiënter voor :)

Het voorbeeld is niet verkeerd maar het levert je veel meer code op dan wanneer je het met preg_replace() zou oplossen.
 
Even uit pure nieuwschierigheid...
Wat doe je met bvb
Code:
[ color=#XXXXXX ] gekleurde tekst [ /color ]
waarbij XXXXXX elke mogelijke waarde kan aannemen?
Dat zou dan bvb moeten omgezet worden naar
Code:
<font color=#XXXXXX> gekleurde tekst </font>
uiteraard met behoud van de waarde voor XXXXXX
 
PHP:
$string = "[color=red]dit is in het rood[/color]";
$string = preg_replace('/[color=(.+)\](.+)\[\/color\]/Usi','<font style="color: \\1">\\2</font>',$string);
Poosje geleden dat ik hem heb gebruikt, maar dacht dat het zo moet kloppen.
 
Vergeten jullie niet dat het doel van BB-code is dat je geen HTML in je forms kunt zetten?

Want ik heb er nog geen gezien die alle HTML codes eruit haalt, dat lijkt me een goede om mee te nemen ;)

Je zou eventueel ook kunnen kijken naar een voorgebakken module hiervoor, zoals
PEAR BB-code parser
 
@Tha Devil:
Werkt perfect! Enkel de allereerste rechte haak moet nog ge-escaped worden;)
PHP:
$string = preg_replace('/\[color=(.+)\](.+)\[\/color\]/Usi','<font style="color: \\1">\\2</font>',$string);
Als ik het goed begrijp, staat (.+) voor een stukje willekeurige tekst, en zal \\1 en \\2 die ook terug plaatsen op de juiste plaats in het resultaat?

@Frats:
-ALLE HTML-code eruit halen kan door er eerst een strip_tags() op los te laten.
-In princiepe maak ik liever uitsluitend gebruik van zelf geschreven code, maar ik zal de parser die je noemde zeker eens proberen :thumb:
 
ik ben ondertussen aan de slag gegaan met preg_replace():

PHP:
$imgmax = 600; // Maximale breedte van een plaatje (in px)

$input = $_POST['bericht'];

$input = htmlentities($input);
$input = nl2br($input);
$input = stripslashes($input);

$input = preg_replace("/\[b\](.*?)\[\/b\]/si", "<b>\\1</b>", $input);
$input = preg_replace("/\[i\](.*?)\[\/i\]/si", "<i>\\1</i>", $input);
$input = preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>\\1</u>", $input);
$input = preg_replace("/\[img\](.*?)\[\/img\]/si", "<img src=\"\\1\" style=\"max-width: ".$imgmax."px ;\" />", $input);
$input = preg_replace("/\[url\](.*?)\[\/url\]/si", "<a href=\"\\1\">\\1</a>", $input);
$input = preg_replace("/\[url=\"?(.*?)\"?\](.*?)\[\/url\]/si", "<a href=\"\\1\">\\2</a>", $input);
$input = preg_replace("/\[color=\"?#?(.*?)\"?\](.*?)\[\/color\]/si", "<span style=\"color: #\\1 ;\">\\2</span>", $input);
$input = preg_replace("/\[code\](.*?)\[\/code\]/si", "<code>\\1</code>", $input);
$input = preg_replace("/\[list\](\<br \/\>)?(.*?)\[\/list\]/si", "<ul>\\2</ul>", $input);
$input = preg_replace("/\[list=1\](.*?)\[\/list\]/si", "<ul style=\"list-style:decimal;\">\\1</ul>", $input);
$input = preg_replace("/\[list=a\](.*?)\[\/list\]/si", "<ul style=\"list-style:lower-alpha;\">\\1</ul>", $input);
$input = preg_replace("/\[\*\](.*?)/si", "<li>\\1", $input);
echo "$input";
 
Belangrijker is of dit is wat je zocht :)
 
Heb je ook de code voor html naar bbcode?
 
Zelfde principe toch :rolleyes:
Kwestie van de gegevens omdraaien.

Je zult wel wat meer mogelijkheden in moeten bouwen omdat er redelijk wat attributen bij een HTML-tag kunnen worden geplaatst.

Ik snap ook niet goed waarom je juist andersom zou willen doen, wat wil je met die BB-code gaan doen? Vervolgens weer naar HTML omzetten? :(
 
Dit is inderdaad wat is nodig had.

Waarom van html naar bbcode?
Nou, ik ben bezig met een forum, de bezoekers kunnen berichten plaatsen met bbcodes erin. Deze worden omgezet naar html en opgeslagen in een database. Als de bezoeker zijn bericht later wil wijzigen. Dan moet de tekst weer in bbcodes weergeven worden.
 
Dan is je ontwerp fout. :rolleyes:

Je moet er voor zorgen dat de BB-code in de database komt te staan.

Vervolgens converteer je deze code bij het weergeven naar HTML.

Wanneer iemand dan zijn bericht wil wijzigen zal gewoon de inhoud van de database worden weergegeven. Dat zal dus de BB-code zijn.

Zo moet je het maken, niet omslachtig gaan doen door de HTML weer terug te willen zetten naar BB ;)
 
Dat kan ik ook doen. Maar duurt het dan niet veel te lang voordat alle berichten zijn omgezet?
 
Nee hoor, hij zal alleen de berichten converteren welke je opvraagt :)

Je kunt het ook nog anders oplossen door een extra veld in je database op te slaan.
In de ene zet je de tekst met BB-code en in de andere de geconverteerde tekst met HTML.

Wil iemand wat wijzigen dan roep je het veld met BB-code op en zorg je bij het wijzigen dat hij beide velden aanpast. (Dus de BB-code en die converteer je om vervolgens ook het HTML-veld aan te passen)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan