Hur nekar man till vanlig HTML-kod och istället använder s.k. "BBcode"/webForum-kod?
Måste man lägga till en kod för varje "händelse" sen? Alltså lägga till så att t.ex. **blir <b> på alla möjligheter?
Känner att det var dåligt förklarat :l**
14 svar · 851 visningar · startad av filipbh
Hur nekar man till vanlig HTML-kod och istället använder s.k. "BBcode"/webForum-kod?
Måste man lägga till en kod för varje "händelse" sen? Alltså lägga till så att t.ex. **blir <b> på alla möjligheter?
Känner att det var dåligt förklarat :l**
Japp, du får sedan kolla "kod för kod" typ:
$text = preg_replace("/\\[b](.*?)\\[\\/b]/is", "<b>$1</b>", $text);
Lämpligtvis lägger du det i arrayer:
$pattern = array (
"/\\[b](.*?)\\[\\/b]/is",
"/\\[i](.*?)\\[\\/i]/is",
"/\\[u](.*?)\\[\\/u]/is"
);
$replace = array (
"<b>$1</b>",
"<i>$1</i>",
"<u>$1</u>"
);
$text = preg_replace($pattern, $replace, $text);
Innan du gör detta kanske du vill "ta bort" HTML-kod. Enklast gör du detta genom att göra om taggarna till entiteter. Du måste göra det innan du kör koden som gör om din bbcode, och då gör du något i den här stilen:
$text = htmlentities($text);
Har bara hunnit testa htmlentities och den fungerar inte som jag vill.. Det jag har nu är:
$gbtext = $rad[text];
$gbtext = htmlentities($gbtext);
echo $gbtext;
Den ligger alltså så att den gör detta när texten skrivs ut.. Ska man ha den när meddelandet sparas istället?
Kan man ha:
$gbtext = $rad[text];
$gbtext = htmlentities($gbtext);
$gbtext = nl2br($gbtext);
echo $gbtext;
Eller blir det fel om man kör både nl2br och htmlentities?
Du kan ha både htmlentities och nl2br, men du måste, precis som du gjort, ha htmlentities före nl2br.
Du kan gott spara texten i sitt "råformat". Det gör det lättare om man t.ex. skulle vilja gå in och ändra på texten.
Det fungerar bra =) Om jag vill ha en tagg som heter "color" och genererar rgb-färger, hur gör jag då?
T.ex Text blir <font color="#F3C5DB">Text</font> Själv color-taggen är ju som de andra men att textens färg blir colors "värde".
T.ex
$text = preg_replace("/\\[color=([0-9a-f]+)](.*?)\\[\\/color]/is", '<span style="color:#$1">$2</span>', $text);
Kör detta efter htmlentities().
Det här kommer upp när jag kör color-koden:
Warning: Unknown modifier 'c' in /customers/divisionsthlm.se/divisionsthlm.se/httpd.www/gastbok.php on line 218
Rad 218: $gbtext = preg_replace($pattern, $replace, $gbtext);
Förlåt det hade försvunnit en "\"... Men det är ett annat fel.
Jag skrev ett inlägg med denna text: Färgad text
Resultatet blev: F&aum;rgad text där F&aum; var färgad men resten vit som övriga texten...
Det fungerar utmärkt när jag testar:
$text = "
Hej hopp
qwerty [color=F3C5DB]Färgad text[/color]
asdfgh
";
$text = htmlentities($text);
$pattern = "/\\[color=([0-9a-f]+)](.*?)\\[\\/color]/is";
$replace = '<span style="color:#$1">$2</span>';
$text = preg_replace($pattern, $replace, $text);
echo nl2br($text);
[EDIT]
Ursäkta, glömmer alltid bort att jag behöver ha dubbla backslash i regexpar för att forumet inte ska rensa bort dom.
Warning: Unknown modifier 'c' in /customers/divisionsthlm.se/divisionsthlm.se/httpd.www/testDSC.php on line 12
kommer upp.. Men det verkar som att wF tar bort vissa "\"...
Så här ser det ut för mig...
Glömmer hela tiden att forumet rensar bort backslash om man inte skriver dom dubbelt i regexpar :)
Har fixat till koden ovan.
Kan du visa din kod som ger det resultatet ?
Skickar det i en textfil så att alla tecken kommer med...
Ändra
"/\\[color=([0-9A-F]+)](.*?)[\\/color]/is",
till
"/\\[color=([0-9A-F]+)](.*?)\\[\\/color]/is",
Alltså lägg till backslash före [\/color].