English 中文(简体)
PHP - BBCode parser - recursive [quote] with regex and preg_replace
原标题:

i m making my own bbcode parser, and i ve a problem when i try to do the recursive quote.

this is my code :

 function forumBBCode($str){
$format_search=array(
 #[quote=(.*?)](.*?)[/quote]#is 
);

$format_replace=array(
 <blockquote class="quotearea"><i><a class="lblackbu" href="./index.php?status=userview&userv=$1">$1</a> wrote :</i><br />$2</blockquote> 
);

$str=preg_replace($format_search, $format_replace, $str);
$str=nl2br($str);
return $str;
}

what i must add/edit to do a recursive quote? in other words, when a quote is inside another quote...

cheers and tnx for the help

最佳回答

See here: Recursive patterns on the PHP manual.

This may also interest you, though it s more of a technicality: Why is recursive regex not regex?

问题回答

This is an old Q but I ll post my solution anyway for ppl =]

$open =  <blockquote><span class="bold">Quote: </span><br /> ; //the next few lines do the parsing for quote blocks. We 
        $close =  </blockquote> ;                                      //have to do it outside the normal parsing arrays because that way does not allow nesting.

        preg_match_all ( /[quote]/i , $str, $matches);
        $opentags = count($matches[ 0 ]);

        preg_match_all ( /[/quote]/i , $str, $matches);
        $closetags = count($matches[ 0 ]);

        $unclosed = $opentags - $closetags;
        for ($i = 0; $i < $unclosed; $i++) {
                $str .=  </blockquote> ;
        }
//Do Quotes (nested)
        $str = str_replace ( [quote] , $open, $str);
        $str = preg_replace( /[quote=(.*?)]/is , <blockquote class="darkbg"><span class="bold left">Quote: $1</span><br /> , $str);
        $str = str_replace ( [/quote] , $close, $str);
return $str;

Peace.





相关问题
Brute-force/DoS prevention in PHP [closed]

I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

定值美元

如何确认来自正确来源的数字。

Generating a drop down list of timezones with PHP

Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...

Text as watermarking in PHP

I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...

How does php cast boolean variables?

How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...

热门标签