Gå til innhold

BB-koder ved og bruke - str_replace


Anbefalte innlegg

Skrevet (endret)

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
Videoannonse
Annonse
Skrevet
Du må bruke regular expressions, str_replace/strtr blir for dårlig for dette formålet

Noe som ereg_replace eller ?

Kan du kanskje vise et eksempel da ? :)

Skrevet (endret)

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
Skrevet

{URL=http://link}Ord{/URL} kan du bruke regexp med feks:

 

$variabel = preg_replace('/\{URL=(.+)\}(.+)\{\/URL\}/', "<a href=\"$1\">$2</a>", $variabel);

Skrevet

Zic0s eksempel er dog sårbar for en del Javascript-koder og andre ulumskheter. Pass alltid på å validere input og kun godta gyldige URL-er.

Skrevet

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å.

Skrevet

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?)

Skrevet

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. :)

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...