Avatar billede horizon Nybegynder
15. juni 2008 - 18:30 Der er 11 kommentarer og
1 løsning

Søg og erstat i bbc kode

Jeg har lidt bøvl med en søg og erstat funktion

jeg har en streng der indeholder følgende:
$String = 'fed,understreget,kursiv';

som jeg vil have konverteret til html tags

jeg har så lavet dette:

$koder = array(
   
        array(
            'tag' => 'b',
            'foer' => '<b>',
            'efter' => '</b>'
        ),
        array(
            'tag' => 'u',
            'foer' => '<u>',
            'efter' => '</u>'
        ),
        array(
            'tag' => 'i',
            'foer' => '<i>',
            'efter' => '</i>'
        )
    );

Men kan så ikke helt se hvordan jeg kommer videre herfra

det skal helst være så jeg kan smide f.eks. et ekstra array ind hvis jeg finder på flere funktioner til min bbc funktion

og noget helt andet som jeg ikke har taget hul på endnu er når jeg vil lave [IMG]link/til/billede.jpg[/IMG] eller [LINK=http://minside.dk]min hjemmeside[/LINK], hvordan skal jeg søge rundt om det som kan være variabelt, altså link og evt tekst??
Avatar billede jakobdo Ekspert
15. juni 2008 - 21:29 #1
Til bare at erstatte ,,,,,, kan du bruge noget i stil med:

$search = array('', '');
$replace  = array('<b>', '</b>');
$text    = 'fed,understreget,kursiv';

$output  = str_replace($search, $replace, $text);
Avatar billede horizon Nybegynder
24. august 2008 - 19:22 #2
fik lavet to funktioner, en til at kryptere <> tags til [] tags og omvendt.

function krypterBBC($String){

    // Liste over tilladte html tags og hvad de skal oversættes til.
    $tilladteTags = array(
       
        '<b>' => '',
        '</b>' => '
',
        '<strong>' => '[strong]',
        '</strong>' => '[/strong]',
        '<i>' => '',
        '</i>' => '
',
        '<u>' => '',
        '</u>' => '
',
        '<pre>' => '
',
        '</pre>' => '
',
        '<sup>' => '[sup]',
        '</sup>' => '[/sup]',
        '<sub>' => '[sub]',
        '</sub>' => '[/sub]',
        '<tt>' => '[tt]',
        '</tt>' => '[/tt]',
        );
       
    return htmlspecialchars(strtr($String, $tilladteTags));

}

function dekrypterBBC($String){

    // Liste over tilladte html tags og hvad de skal oversættes til.
    $tilladteTags = array(
       
        '' => '<b>',
        '
' => '</b>',
        '[strong]' => '<strong>',
        '[/strong]' => '</strong>',
        '' => '<i>',
        '
' => '</i>',
        '' => '<u>',
        '
' => '</u>',
        '
' => '<pre>',
        '
' => '</pre>',
        '[sup]' => '<sup>',
        '[/sup]' => '</sup>',
        '[sub]' => '<sub>',
        '[/sub]' => '</sub>',
        '[tt]' => '<tt>',
        '[/tt]' => '</tt>',
        );
   
    return strtr($String, $tilladteTags);

}

Så er det bare hvordan man laver det sidste, som f.eks. med [img] tags og [link] tags og [quote] tags.

efter hvad jeg har set så skal der gang i en hel del reg.exp. eller er det helt galt?
Avatar billede horizon Nybegynder
24. august 2008 - 19:24 #3
krypterBBC er beregnet til at kryptere indhold som bliver sendt fra forms, og så blokkerer den også for ikke tilladte tags som f.eks. forms

dekrypterBBC er så til når indhold skal vises.

skal man virkelig lave to forskellige funktioner og så skrive det hele to gange, eller kan det måske også gøres anderledes?
Avatar billede jakobdo Ekspert
24. august 2008 - 22:10 #4
Der er vel ingen grund til at køre begge veje ?
Når en bruger skriver noget "kode", skriver han/hun:

Hej med dig!

Det bliver så oversat til:
Hej <b>med</b> dig!
Og gemt i db eller oversat når det vises.
Men det skal vel ikke vendes den anden vej igen ?
Med mindre det selvfølgelig skal kunne redigeres.
Men så kunne man jo vælge blot at oversætte når det vises.
Avatar billede horizon Nybegynder
24. august 2008 - 22:37 #5
nååh ja, det er der noget om. :-P
Avatar billede horizon Nybegynder
09. oktober 2008 - 22:20 #6
men hvordan får jeg så lavet en funktion der f.eks. finder ud af om brugeren har lavet et [IMG]blah.gif[/IMG] eller f.eks. [LINK=http://example.net]my website[/LINK] tag?
Avatar billede jakobdo Ekspert
10. oktober 2008 - 06:32 #7
Hører det ikke til i et nyt spørgsmål synes du ?
Ellers kan du jo blive ved i dette ?

Men det kræver jo blot lidt andre replacements.
[IMG]noget[/img] skal jo blot laves til:

<img src="noget" />
Begge dele kan laves med regexp.
Avatar billede horizon Nybegynder
10. oktober 2008 - 12:40 #8
neej, jeg skrev jo begge spørgsmål i det originale spørgsmål, så mit spørgsmål er jo ikke blevet komplet besvaret efter min mening.
Avatar billede jakobdo Ekspert
10. oktober 2008 - 12:53 #9
Billede: $result = preg_replace('%\[IMG\](.+?)\[/IMG\]%', '<img src="$1" alt="$1" />', $subject);

Link: $result = preg_replace('%\[LINK=(.+?)\](.+?)\[/LINK\]%', '<a href="$1" title="$2">$2</a>', $subject);
Avatar billede horizon Nybegynder
16. februar 2009 - 22:01 #10
Hov... lad os få lukket

Smid et svar :o)
Avatar billede jakobdo Ekspert
16. februar 2009 - 22:09 #11
Svar!
Avatar billede jakobdo Ekspert
17. februar 2009 - 21:59 #12
Takker for point.
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