Vraag & Antwoord

Webprogrammeren & scripting

[php] BB parser

Anoniem
Bill Gates
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 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

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