F filipbh Medlem sedan juli 2002 405 inlägg Trådstart 15 juli 2004 22:09 #1 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**
Matte Medlem sedan aug. 2000 2 975 inlägg 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);
F filipbh Medlem sedan juli 2002 405 inlägg 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?
Matte Medlem sedan aug. 2000 2 975 inlägg 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.
F filipbh Medlem sedan juli 2002 405 inlägg 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".
Matte Medlem sedan aug. 2000 2 975 inlägg T.ex
$text = preg_replace("/\\[color=([0-9a-f]+)](.*?)\\[\\/color]/is", '<span style="color:#$1">$2</span>', $text);
Kör detta efter htmlentities().
F filipbh Medlem sedan juli 2002 405 inlägg 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 filipbh Medlem sedan juli 2002 405 inlägg 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...
Matte Medlem sedan aug. 2000 2 975 inlägg 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.
F filipbh Medlem sedan juli 2002 405 inlägg 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 "\"...
F filipbh Medlem sedan juli 2002 405 inlägg Så här ser det ut för mig...
Matte Medlem sedan aug. 2000 2 975 inlägg 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 ?
F filipbh Medlem sedan juli 2002 405 inlägg Skickar det i en textfil så att alla tecken kommer med...
Matte Medlem sedan aug. 2000 2 975 inlägg Ändra
"/\\[color=([0-9A-F]+)](.*?)[\\/color]/is",
till
"/\\[color=([0-9A-F]+)](.*?)\\[\\/color]/is",
Alltså lägg till backslash före [\/color].