Vraag & Antwoord

Webprogrammeren & scripting

[php] BB parser

4 antwoorden
  • Ik ben bezig met een kleine bb parser voor m'n site, maar nu kom ik op een probleem :( Ik zoek de tekst tussen [ code ] tags op, en die duw ik in een functie. Alleen het lukt me niet om die string te bewerken :S Dit is de code. [code:1:a8871d7c14]<? $smilie_find = array( '>:)', ':)', '|:(', ":'(", ':P', ); $smilie_replace = array( '<img class="smilie" src="../pics/smilies/devil.gif">', '<img class="smilie" src="../pics/smilies/smile.gif">', '<img class="smilie" src="../pics/smilies/frusty.gif">', '<img class="smilie" src="../pics/smilies/cry.gif">', '<img class="smilie" src="../pics/smilies/puh2.gif">', ); function code($input, $numbers, $code) { global $smilie_find, $smilie_replace; //$input = trim(str_replace("<br />", "\n", $input)); for($i=0; $i < count($smilie_find); $i++) { $input = str_replace($smilie_replace["$i"], $smilie_find["$i"], $input); //echo $smilie_replace["$i"] . " ---- " . $smilie_find["$i"] . "<br>\n"; } if($code == 0) $output = $input; elseif($code == 1) { $input = str_replace("<", "<", $input); $input = str_replace(">", ">", $input); $input = str_replace(""", '"', $input); $input = str_replace("&", "&", $input); $input = str_replace('\\"', '\"', $input); ob_start(); @highlight_string($input); $output = ob_get_contents(); ob_end_clean(); } $output = str_replace("]", "&#93", $output); $output = str_replace("[", "&#91", $output); return $output; } function bbcode($input) { global $smilie_find, $smilie_replace; $input = nl2br(htmlspecialchars(trim($input))); for($i=0; $i < count($smilie_find); $i++) $input = str_replace($smilie_find["$i"], $smilie_replace["$i"], $input); $input = eregi_replace('\[code\](.*)\[/code\]', code('\\1', 1, 1), $input); $input = eregi_replace('\[php\](.*)\[/php\]', code("\\1", 1, 1), $input); $input = eregi_replace('\[no\](.*)\[/no\]', code("\\1", 0, 0), $input); $input = preg_replace('!\[b\](.+)\[/b\]!', "<b>\\1</b>", $input); $input = preg_replace('!\[u\](.+)\[/u\]!', "<u>\\1</u>", $input); $input = preg_replace('!\[i\](.+)\[/i\]!', "<i>\\1</i>", $input); $input = preg_replace('!\[s\](.+)\[/s\]!', "<s>\\1</s>", $input); $input = preg_replace('!\[li\](.+)\[/li\]!', "<li>\\1</li>", $input); $input = preg_replace('!\[quote\](.+)\[/quote\]!', "<blockquote>Quote:<hr>\\1</hr></blockquote>", $input); $input = preg_replace('!\[quote=(.+)\](.+)\[/quote\]!', "<blockquote>Quote van \\1<hr>\\2</blockquote>", $input); $input = preg_replace('!\[url\](.+)\[/url\]!', "<a href=\"\\1\">\\1</a>", $input); $input = preg_replace('!\[url=(.+)\](.+)\[/url\]!', "<a href=\"\\1\">\\2</a>", $input); $input = preg_replace('!\[img=(.+)\](.+)\]!', "<img src=\"\\1\">", $input); return $input; } echo bbcode($_POST["bericht"]); ?> <form name="form1" method="post" action=""> <p> <textarea name="bericht" cols="80" rows="8" id="bericht"><? echo htmlspecialchars($_POST[bericht]); ?></textarea> </p> <p> <input type="submit" name="Submit" value="Submit"> </p> </form>[/code:1:a8871d7c14]
  • [code:1:ec8127b42d]$input = eregi_replace('\[code\](.*)\[/code\]', code('\\1', 1, 1), $input); $input = eregi_replace('\[php\](.*)\[/php\]', code("\\1", 1, 1), $input); $input = eregi_replace('\[no\](.*)\[/no\]', code("\\1", 0, 0), $input);[/code:1:ec8127b42d] Met eregi_replace kun je alleen 'letterlijk' vervangen. Dus geen PHP code als vervanging instellen. Met perl-regexps kan dat wel. Dan moet je wel: [code:1:ec8127b42d]$input = preg_replace('/\[code\](.*)\[/code\]/e', code('\\1', 1, 1), $input);[/code:1:ec8127b42d] Ik geef de /e 'modifiër' mee, omdat PHP weet dat hij het tweede gedeelte als PHP op moet vatten.
  • mja, ik vat het. maar ik krijg een vage error: Warning: Unknown modifier 'c' in c:\apache\htdocs\site\inc\minibb.parser.inc.php on line 170 Warning: Unknown modifier 'c' in c:\apache\htdocs\site\inc\minibb.parser.inc.php on line 170 2x die error bij je preg
  • Waarom gebruik je geen database?

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.