Mellet Skrevet 6. august 2005 Del Skrevet 6. august 2005 (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 { Endret 6. august 2005 av Mellet Lenke til kommentar
dabear Skrevet 6. august 2005 Del Skrevet 6. august 2005 Du må bruke regular expressions, str_replace/strtr blir for dårlig for dette formålet Lenke til kommentar
Mellet Skrevet 6. august 2005 Forfatter Del Skrevet 6. august 2005 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 ? Lenke til kommentar
dabear Skrevet 6. august 2005 Del Skrevet 6. august 2005 (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 6. august 2005 av dabear Lenke til kommentar
Zic0 Skrevet 6. august 2005 Del Skrevet 6. august 2005 {URL=http://link}Ord{/URL} kan du bruke regexp med feks: $variabel = preg_replace('/\{URL=(.+)\}(.+)\{\/URL\}/', "<a href=\"$1\">$2</a>", $variabel); Lenke til kommentar
Ponduss Skrevet 7. august 2005 Del Skrevet 7. august 2005 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. Lenke til kommentar
???????? Skrevet 7. august 2005 Del Skrevet 7. august 2005 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
Zic0 Skrevet 7. august 2005 Del Skrevet 7. august 2005 med quotemeta kan du escape de fleste regexp tegn utennom / som du gjør med str_replace('/', '\/', $variabel); Lenke til kommentar
Lokaltog Skrevet 9. august 2005 Del Skrevet 9. august 2005 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
jorgis Skrevet 9. august 2005 Del Skrevet 9. august 2005 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå