Avatar billede Slettet bruger
29. september 2002 - 00:09 Der er 16 kommentarer og
1 løsning

brug af [b] til at lave tekst fed i artikel

Hej!

Jeg har et artikelsystem, som jeg kaster gennem htmlentities() inden den ryger i databasen.

Nu vil jeg gerne have at hvis man skriver

hejsa bliver hejsa skrevet med fed skrift.

Det samme gælder [i] og [u] som italic og underline

Det er fin hvis det vare sker ved udskrivningen, og ikke når den lægges i DB.
Avatar billede jakobgt Nybegynder
29. september 2002 - 00:13 #1
Du kan vil bruge regulære udtryk.... (http://dk.php.net/manual/en/function.ereg-replace.php)
Avatar billede Slettet bruger
29. september 2002 - 00:16 #2
ja...jeg er bare en nar til regexp's...såe...

Jeg regner ikke med at jeg er den første der vil lave noget i den stil, en søgning efter [b] på Eksperten gav 0 resultater (kan det virkelig passe?)
Avatar billede leflings Nybegynder
29. september 2002 - 00:32 #3
Du kunne evt. prøve en ereg_replace, f.eks:

ereg_replace("[b]","<b>",$tekst);
Avatar billede lequet Nybegynder
29. september 2002 - 00:33 #4
Tja... Burde jo være dejligt simpelt :

$tekst = str_replace("", "<b>", $tekst) ;
$tekst = str_replace("
", "</b>", $tekst) ;

$tekst = str_replace("", "<u>", $tekst) ;
$tekst = str_replace("
", "</u>", $tekst) ;

$tekst = str_replace("", "<i>", $tekst) ;
$tekst = str_replace("
", "</i>", $tekst) ;

Dette sættes blot før du udskriver teksten. Går ud fra du selv kan gætte dig til resten :)
Avatar billede lequet Nybegynder
29. september 2002 - 00:35 #5
leflings > Da [ og ] er specialtegn i reg. exp. og har sin egen betydning kunne jeg nemt forestille mig problemer med dit eksempel. str_replace er nok bedre i det tilfælde
Avatar billede jakobgt Nybegynder
29. september 2002 - 00:37 #6
Nu har jeg så godt nok brugt preg_replace, men så har den også mulighed for udvidelse.
Flg. kode erstatter en eller anden tekst (det kan også være [B]en eller anden tekst[/B] ) med <b>en eller anden tekst</b>.

$soeg_efter[0] = "/\[(b|B)\](.*)\[\/(b|B)\]/";
$erstat_med[0] = "<b>\\2</b>";

$soeg_efter[1] = "/\[(i|I)\](.*)\[\/(i|I)\]/";
$erstat_med[1] = "<i>\\2</i>";
osv.
preg_replace bruger kan også bruges til arrays
$tekst = preg_replace( $soeg_efter, $erstat_med, $tekst);

Håber det kan bruges til noget....
Mvh Jakob
Avatar billede jakobgt Nybegynder
29. september 2002 - 00:38 #7
Ahh ged, jeg kan vist ikke stave/skrive dansk:
preg_replace bruger kan også bruges til arrays
skulle have været:
preg_replace kan også bruges til arrays
Avatar billede Noone Nybegynder
29. september 2002 - 00:42 #8
$specialtags = array(
              "" => "<b>",
              "[B]" => "<b>",
              "
" => "</b>",
              "[/B]" => "</b>");

$tekst = strtr($tekst,$specialtags);

Men udgaven med regular expressions er stadig den bedste.. Hvis man altså forstår hvad der sker.. (Hader selv at ha' kode jeg ikke fatter en meter af)
Avatar billede jakobgt Nybegynder
29. september 2002 - 00:44 #9
Det kan der selvfølgelig være noget om, men så vidt jeg ved er preg_replace hurtigere end de andre...
Avatar billede Noone Nybegynder
29. september 2002 - 00:47 #10
Tja, men det er ikke fedt at fejlfinde kode man ikke forstår.. Desuden tror jeg der skal mange erstatninger til eller det skal være en travl site, for man ser forskel i performance.;)
Avatar billede jakobgt Nybegynder
29. september 2002 - 00:48 #11
Ja ja, man ved jo aldrig. ;o)
Avatar billede jakobgt Nybegynder
29. september 2002 - 00:57 #12
Nu ved jeg godt at det ikke er den bedste reklame, men jeg har lige fundet en fejl i det jeg postede lige før. Den tog ikke højde for at der kunne være flere forekomster af f.eks. .
Her er en udgave der gør det, men den tager så ikke højde for at man f.eks. kunne glemme at skrive
til sidst, og hele teksten efter [b] derfor bliver fed.:

$soeg_efter[0] = "/\[(i|I|B|b|u|U)\]/";
$erstat_med[0] = "<\\1>";
$soeg_efter[1] = "/\[\/(i|I|B|b|u|U)\]/";
$erstat_med[1] = "</\\1>";
$tekst = preg_replace( $soeg_efter, $erstat_med, $tekst);

Den ligner chanoa's og lequet's meget...
Avatar billede Slettet bruger
29. september 2002 - 11:18 #13
Ok, nu kom der mere relevante forslag på bordet ;)

lequet's og chanoa's er desværre ikke gode nok.

jakobgt> Tager din højde for at hvis en bruger glemmer at lukke sit [b] tag, så skriver den ikke resten af siden med fed?
Avatar billede jakobgt Nybegynder
29. september 2002 - 11:48 #14
Det første skulle have gjort det, men det virker kun hvis personen ikke skriver tekst mere end én gang....
Det sidste skifter bare [b] ud med <b> ([i] ud med <i> osv.), og tager altså ikke højde for om personen glemmer at "lukke" [b] igen.
Avatar billede Slettet bruger
29. september 2002 - 12:07 #15
hm....så må jeg jo vente lidt længere på at få mit problem løst :)
Avatar billede Slettet bruger
29. september 2002 - 12:18 #16
Fandt dette her et andet sted:

$tekst = preg_replace("/\[b\](.+?)\[\/b\]/is",'<b>\1</b>', $tekst);
$tekst = preg_replace("/\[u\](.+?)\[\/u\]/is",'<u>\1</u>', $tekst);
$tekst = preg_replace("/\[i\](.+?)\[\/i\]/is",'<i>\1</i>', $tekst);
Avatar billede Slettet bruger
29. september 2002 - 12:18 #17
Men tak for forsøget allesammen!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester