Gå til innhold

BB-koder ved og bruke - str_replace


Anbefalte innlegg

Jeg skal ha litt BB koder i Gjesteboken min.

 

Da gjør jeg slik:

 

$melding = str_replace('{b}', '<strong>', $melding);

$melding = str_replace('{/b}', '</strong>', $melding);

 

Men problemet er når jeg kommer til andre ting som for eksempel linker og bilder.

 

Hvordan gjør jeg det vis jeg vil ha:

{URL=http://link}Ord{/URL}

eller

{bilde}url{/bilde}

 

PS: Har byttet ut alle [ med { :p

Endret av Mellet
Lenke til kommentar
Videoannonse
Annonse

Den er grei. Merk at det er litt problemer viss linker inneholder æ,ø,å.

<?php
class bbcode
{

   function bbcode_replace($melding)
   { 
 

          $patterns = array( 
    
           "quote"        =>   "#\\[quote\\](.*?)\\[/quote\\]#si", 
           "quote_parm"   =>   "#\\[quote=\"(.*?)\"\\](.*?)\\[/quote\\]#si", 
            "url"          =>   "#\\[url=(.*?)\\](.*?)\\[/url\\]#si", 
            "u"            =>   "#\\[u\\](.*?)\\[/u\\]#si", 
            "i"            =>   "#\\[i\\](.*?)\\[/i\\]#si", 
             "b"            =>   "#\\[b\\](.*?)\\[/b\\]#si", 
             "list"         =>   "#\\[list\\](.*?)\\[/list\\]#si", 
           "img"          =>   "#\\[img\\](.*?)\\[/img\\]#si", 
            "color"        =>   "#\\[color=(.*?)\\](.*?)\\[/color\\]#si", 
           "size"         =>   "#\\[size=(.*?)\\](.*?)\\[/size\\]#si" 
                     
       ); 



       $replacements = array(
         
           "quote"        =>   "<strong>Quote: <br /> \\1</strong>", 
           "quote_parm"   =>   "<strong>\\1 Skreiv: <br> \\2</strong>", 
           "url"          =>   "<a href=\"\\1\" target=\"_blank\">\\2</a>", 
           "u"            =>   "<u>\\1</u>", 
           "i"            =>   "<i>\\1</i>", 
           "b"            =>   "<strong>\\1</strong>", 
             "list"         =>   "<ul>\\1</ul>", 
             "img"          =>   "<img src=\"\\1\" alt=\"\" />", 
            "color"        =>   "<div style=\" color:\"\\1\">\\2;", 
            "size"         =>   "<span style=\"font-size:\"\\1pt\">\\2 \</span>" 

         ); 

 

    $text = preg_replace($patterns, $replacements, $melding);
 
       return $text;

               

   }
           

    function linker($str)
   { 
              $str =preg_replace("/((f|ht)tp:\/\/[a-z0-9~#%@\&:=?\/\.,_-]+[a-z0-9~#%@\&=?\+\/_-]+)/i", "<a href=\"\\1\">\\1</a>", $str); //http 
           $str = preg_replace("/([[:space:]a-z0-9{()\"'\[~#%@\&:=?\._-])(www.[a-z0-9~#%@\&:=?\/\.,_-]+[a-z0-9~#%@\&=?\+\/_-]+)/i", "\\1<a href=\"http://\\2\">\\2</a>", $str); // www. 
           $str = preg_replace("/([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})/i", "<a href=\"mailto:\\1\">\\1</a>", $str); // mail 

               return $str; 
               
    }
           





}

$class = new bbcode;
echo htmlentities($class->bbcode_replace($class->linker('[b]her legger du teksten du skal formatere i bbcode[/b]')));
?>

Endret av dabear
Lenke til kommentar

Zic0, mener du ikke (.*?) ?

Bytt ut { med [ og (.+) med (.*?) - kan eventuelt byttes ut med (.+?).

 

preg_replace('/\[URL=(.*?)\](.*?)\[\/URL\]/i', "<a href=\"$1\">$2</a>", $str);

 

Legg merke til det Ponduss sier, det er ingen validering av om det settes inn andre tegn, eller til og med html og JavaSCript koder. Du kan enten legge til at den ikke får ha sånne tegn, eller bruke strip_tags() og kun la den godta tagger du har oversatt. Dette er noe du burde gjøre uansett, slik at det ikke sniker seg inn andre koder fra andre funksjoner også.

Lenke til kommentar

Jeg har et problem med nesting av sitater når jeg bruker metodene som er foreslått til nå i denne tråden. Jeg bruker denne koden nå:

$text = preg_replace('#\[sitat\](.+?)\[/sitat\]#is', '<blockquote><p>$1</p></blockquote>', $text);

 

Hvis jeg nå vil parse følgende BBcode:

[sitat]Testsitat [sitat]Testsitat[/sitat] [/sitat]

Så blir resultatet dette:

<blockquote><p>Testsitat [sitat]Testsitat</p></blockquote> [/sitat]

 

Hvordan skal jeg få til å neste sitater på denne måten? (Hvordan gjøres det f.eks. i dette forumet?)

Lenke til kommentar

Slik har jeg gjort det, og det funker ganske greit:

 

//BBcode for QUOTES
 	
   //if there is no =-character, do it the lazy way:
   $post = preg_replace("#\[quote\]#is", "<fieldset class=\"quote\"><legend>QUOTE:</legend><p class=\"nopadding\">", $post);
   
   //else, do it properly
   $post = preg_replace("#\[quote=(.+?)\]#is", "<fieldset class=\"quote\"><legend>QUOTE: $1</legend><p class=\"nopadding\">", $post);
   
   
   //then the data and the footer
   $post = preg_replace("#(.+?)\[/quote\]#is", "" . str_replace("<br>", "", "$1") . "</p></fieldset>", $post);

 

Trikset er å dele opp i to tagger. Legg også merke til at [ quote=brukernavn, dato] er mulig. :)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...