• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 163
  • Last Modified:

need help with getting my code to work right for bbcode

for some reason i cant get my quote code to work...

all my other bbcode in the file below works like bold and italic but i cant seem to get my quote to work stated here = "/\[quote=(.*)\](.*)\[\/quote\]/is" => "<div style=\"background: #e4ebeb; border: 1px solid #555555; padding: 6px;\">
<div style=\"font-size:10px; color:#043050;\">Quote by * :</div>
<div>~</div></div>
"

i dont understand it as i have had it working... in the next post below i have stated my code where the code is written into the text box
<?php
 
class BBCode {
     protected $bbcodes; // Store array of BBCodes
     protected $vbbcodes; // Store array of Variable BBCodes
     var $debug = ''; // Store any errors
     var $selection = ''; // Store the selection to be parsed first
     var $parsed = ''; // Store the parsed selection.
     var $path2emoticon = 'http://www.runningprofiles.com/emoticons/'; // Set the path to the emoticon images.
     var $imgext = '.gif'; // Set this to the ext of the images
     public $emoticons = 
          array( '::)' => 'Roll Eyes', ':)' => 'Smiley', ';)' => 'Wink', ':D' => 'Cheesy', ';D' => 'Grin', '>:(' => 'Angry',
          ':(' => 'Sad', ':o' => 'Shocked', '8)' => 'Cool', '???' => 'Huh', ':P' => 'Tongue', ':-[' => 'Embarrassed', 
          ':-X' => 'Lips Sealed', ':-\\' => 'Undecided', ':-*' => 'Kiss', ':*(' => 'Cry' ); 
          // All emoticons. Spaces and caps will be removed for image names.
     
     function parseCode($security=0) { // Security defaults to 0. Set to 1 for non-variable bbcodes only.
          if(!$this->selection) { // Check if the user has set the selection.
               $this->debug .= "You must set a value for the selection before parsing! "; // Set the Debug variable if not.
          }else{
               if($this->parsed) { // Check if text has already been parsed.
                    $this->debug .= "You must run the code parser before the emoticon parser! "; // Set the Debug variable if so.
               }else{
                    $selection = str_replace("\n", '', $this->selection); // Set selection variable for inside function only.
                    $selection2 = htmlentities(str_replace("\n", '', $this->selection)); // Remove html entities for security.
                    $this->selectCodes($security); // Select codes depending on security.
                    #### Start [code] Section ###
                    preg_match_all("/\[code\].+\[\/code\]/Ui", $selection2, $matches); // Check for [code] tags. Set the matches array.
                    $i = 0; // Set the variable to the default of 0.
                    while(isset($matches[0][$i])) { // Check for match from preg_match.
                         $selection = str_ireplace(html_entity_decode($matches[0][$i]), "[code$i]", $selection); // Decode and replace for strip tags.
                         $i++; // Add one to the variable to loop.
                    }
                    $selection = strip_tags($selection); // Strip tags from the selection.
                    while($i>0) { // Reloop through matches.
                         $i--; // Remove one from the variable to loop.
                         $m = html_entity_decode($matches[0][$i]); // Decode the match for accurate removal.
                         $m = str_ireplace("[code]", "", $m); // Remove [code] tag.
                         $m = str_ireplace("[/code]", "", $m); // Remove [/code] tag.
                         $m = highlight_string($m,true); // Highlight string and encode.
                         $selection = str_ireplace("[code$i]", "[code]" . $m . "[/code]", $selection); // Add highlighted code back with tags for later parsing.
                    }
                    #### End [code] Section ####
                    ### Start BBCode Section ###
                    foreach ($this->bbcodes as $key => $value) { // Loop through bbcodes.
                         $selection = str_ireplace($key, $value, $selection); // Replace the $key value(bbcode) with the $value value(html code).
                    }
                    #### End BBCode Section ###
                    ### Start Var. BBCode Sec. ##
                    if($security==0) { // Only loop through if security allows it.
                         foreach ($this->vbbcodes as $key => $value) { // Loop through variable bbcodes.
                              unset($matches); // Unset matches set in earlier code.
                              $i = 0; // Set the variable to the default of 0.
                              preg_match_all($key, $selection, $matches); // Find all instances of the variable bbcode set them to matches.
                              // Preg Matching also stores the "variables" inside the matches var. with the matches.
                              while(isset($matches[0][$i])) { // Check if there are any instances.
                                   $v = str_replace("*", $matches[1][$i], $value); // Replace the asterisk with the variable value.
                                   if(isset($matches[2][$i])) { // Check for more than one variable.
                                        $v = str_replace("~", $matches[2][$i], $v); // Replace the ~ with the second variable value.
                                   }
                                   $selection = str_replace($matches[0][$i], $v, $selection); // Replace the match with the accumulated variable.
                                   $i++; // Add one to the variable to loop.
                              }
                         }
                    }
                    ### End Var. BBCode Sec. ##
                    $this->parsed = $selection; // Insert the accumulated parsed selection into the parsed variable as to keep selection original.
                    unset($selection); // Remove all value from private variable selection.
               }
          }
     }
     
      protected function selectCodes($security=0) { // Security defaults to 0. Set to 1 for non-variable bbcodes only.
      switch ($security) { // Switch between 0 and 1.
         default: // In the case of security being anything but one. Defaulting to zero.
         case 0: // In the case of security being zero.
            $this->bbcodes =
               array( "[i]" => "<i>", "[/i]" => "</i>",  "[b]" => "<b>", "[/b]" => "</b>", "[u]" => "<u>", "[/u]" => "</u>", "[s]" => "<del>", "[/s]" => "</del>", "[move]" => "<marquee>", "[/move]" => "</marquee>",
               "[center]" => "<center>", "[/center]" => "</center>", "[hr]" => "<hr />", "[table][tr][td]" => "<table>", "" => "</table>", "[table][tr][td]" => "<tr>", "[/td][/tr][/table]" => "</tr>", "[table][tr][td]" => "<td>",
               "[/td][/tr][/table]" => "</td>", "[sub]" => "<sub>", "[/sub]" => "</sub>", "[sup]" => "<sup>", "[/sup]" => "</sup>", "[tt]" => "<tt>", "[/tt]" => "</tt>", "[list]" => "<ul>", "[/list]" => "</ul>", "[list][li]" => "<li>",
               "[/li][/list]" => "</li>", "[/size]" => "</font>", "[/face]" => "</font>", "[/color]" => "</font>", "[p]" => "<p>", "[/p]" => "</p>",
               "[/td][/tr][/table][code]" => "<p style=\"background: #BBBBBB; border: 1px solid #555555; padding: 6px;\"><span style=\"font: bold 10px Courier New;\">&nbsp;&nbsp;&nbsp;CODE :</span><br/>",);
            // BBCode array including their replacement.
            $this->vbbcodes = 
               array( "/\[size=(.+)\]/Ui" => "<font size=\"*\">", "/\[face=(.+)\]/U" => "<font face=\"*\">", "/\[color=(.+)\]/Ui" => "<font color=\"*\">", "/\[img\](.+)\[\/img\]/Ui" => "<img src=\"*\" />",
               "/\[email\](.+)\[\/email\]/Ui" => "<a href=\"mailto:*\">*</a>", "/\[url\](.+)\[\/url\]/Ui" => "<a href=http://\*\>*</a>", "/\[email=(.+)\](.+)\[\/email\]/Ui" => "<a href=\"mailto:*\">~</a>",
               "/\[url=(.+)\](.+)\[\/url\]/Ui" => "<a href=\"*\">~</a>", "/\[quote](.+)\[\/quote\]/is" => "<div class=\"quote_header\">Quote:</div><div class=\"quote_body\">*</div>", "/\[quote=(.*)\](.*)\[\/quote\]/is" => "<div style=\"background: #e4ebeb; border: 1px solid #555555; padding: 6px;\">
<div style=\"font-size:10px; color:#043050;\">Quote by * :</div>
<div>~</div></div>
" );  
            // Variable BBCode array including their replacement and variable position(s).
            break;
         case 1: // In the case of security being one.
            $this->bbcodes =
               array( "[i]" => "<i>", "[/i]" => "</i>", "[b]" => "<b>", "[/b]" => "</b>", "[u]" => "<u>", "[/u]" => "</u>", "[s]" => "<del>", "[/s]" => "</del>", "[move]" => "<marquee>", "[/move]" => "</marquee>",
               "[center]" => "<center>", "[/center]" => "</center>", "[hr]" => "<hr />", "[table][tr][td]" => "<table>", "" => "</table>", "[table][tr][td]" => "<tr>", "[/td][/tr][/table]" => "</tr>", "[table][tr][td]" => "<td>",
               "[/td][/tr][/table]" => "</td>", "[sub]" => "<sub>", "[/sub]" => "</sub>", "[sup]" => "<sup>", "[/sup]" => "</sup>", "[tt]" => "<tt>", "[/tt]" => "</tt>", "[list]" => "<ul>", "[/list]" => "</ul>", "[list][li]" => "<li>",
               "[/li][/list]" => "</li>", "[/td][/tr][/table][code]" => "<p style=\"background: #BBBBBB; border: 1px solid #555555; padding: 6px;\"><span style=\"font: bold 10px Courier New;\">&nbsp;&nbsp;&nbsp;CODE :</span><br/>",
               "[/c.ode]" => "</p>" ,"[c.ode]" => "<p style=\"background: #BBBBBB; border: 1px solid #555555; padding: 6px;\"><span style=\"font: bold 10px Courier New;\">&nbsp;&nbsp;&nbsp;CODE :</span><br/>", "[/c.ode]" => "</p>");
            // BBCode array including their replacement.
            break; 
          }
     }
     function parseEmoticons($noBBCode=0) { // noBBCode variable defaults to 0. If set to one the parser will not parse be able to parse BBCode.
          if(!$this->selection) { // Check if the user has set the selection.
               $this->debug .= "You must set a value for the selection before parsing! "; // Set the Debug variable if not.
          }else{
               $error = 0; // Default to no errors.
               if($this->parsed) { // If something has already been parsed.
                    $selection = str_replace("\n", '', $this->parsed); // Set the parsed value in order to not reset the already parsed selection.
               }elseif($noBBCode==1) { // If nothing has been parsed and the noBBCode variable has been set to one.
                    $selection = str_replace("\n", '', $this->selection); // Set the selection value to variable selection.
                    $error = 2; // Set the error variable to 2 so that it will not look for [code] tags.
               }else{ // If all else fails.
                    $this->debug .= "You must parse BBCode first or set the noBBCode variable to 1(setting this variable will not allow bbcode to be parsed)! "; // Set the Debug variable if it gets here.
                    $error = 1; // Set the error variable so the parser doesn't run.
               }
               if($error==0 or $error==2) {
                    if($error==0) { // Only search if there has been parsing.
                         unset($matches);
                         preg_match_all('/\<p style="background: #BBBBBB; border: 1px solid #555555; padding: 6px;"\>.+\<\/p\>/Uim', $selection, $matches); // Finds all code selections.
                         $i = 0; // Set the variable to the default of 0.
                         while(isset($matches[0][$i])) { // Check for match from preg_match.
                              $selection = str_ireplace($matches[0][$i], "[code$i]", $selection); // Replace for non-emoticon section.
                              $i++; // Add one to the variable to loop.
                         }
                    }
                    foreach($this->emoticons as $key => $value) { // For each emoticon set the key and value.
                         $v = str_replace(" ", "", $value); // Remove all spaces from value but not replacing the value variable.
                         $v = "<img src=\"" . $this->path2emoticon . strtolower($v) . $this->imgext . "\" alt=\"$value\" />"; // Set the image replacement up.
                         $selection = str_ireplace($key, $v, $selection); // Replace the key with the set up image replacement.
                    }
                    if($error==0) { // Only search if there has been parsing.
                         while($i>0) { // Reloop through matches.
                              $i--; // Remove one from the variable to loop.
                              $selection = str_ireplace("[code$i]", $matches[0][$i], $selection); // Add the codes back for final display.
                         }
                    }
                    $this->parsed = $selection; // Insert the accumulated parsed selection into the parsed variable as to keep selection original.
                    unset($selection); // Remove all value from private variable selection.
               }
          }
     }
}
?>

Open in new window

0
runnerjp
Asked:
runnerjp
1 Solution
 
runnerjpAuthor Commented:
like i said here is my code that i use to post the code in my forum... the only thing i have really chnaged is adding escape strings mysql_real_escape_string($_POST['yourpost']);..

now i type into my textbox this  [quote=me]this is a test[/quote] and it outputs this rather then the bbcode chnage ??
<link rel="stylesheet" type="text/css" href="http://www.runningprofiles.com/css/login.css">
<link rel="stylesheet" type="text/css" href="http://www.runningprofiles.com/members/include/style.css">
<script language="JavaScript" src="bbcodebuttons.js"></script>
<?php
 
require_once '../settings.php';
checkLogin('1 2');
 
include "../info.php"; // sets username/id ect
include "../getuser.php"; // records user view on page
include "checkinfo.php"; //Your ip address is...;
include "forumnav.php"; // shows where you are on the forum
 
 
if (isset($_POST['preview'])) //preview post!
 
{
 
				$thePost = $_POST['yourpost'];
				$theSubject = $_POST['subject'];
				if ($thePost == "" || $thePost == null)
				{
								$errMsgPost = "Error: You did not type in a post."; //no post entered
				} elseif ($theSubject == "" || $theSubject == null)
				{
								$errMsgSubject = "Error: You did not enter a subject."; //no subject entered
				}
				else
				{
								$message = $_POST['yourpost'];
 
								$message = BBCode($message); ?><center> <p>your post will say.. </p> </center>
                               
   
    <table width="90%" class="loggedin">
  <tr>
    <td><?php echo $message; ?></td>
  </tr>
</table>
<br />
 
 <?php
				}
} elseif (isset($_POST['submit']))
{
				$thePost =  mysql_real_escape_string($_POST['yourpost']);
				$theSubject =  mysql_real_escape_string($_POST['subject']);
				if ($thePost == "" || $thePost == null)
				{
								$errMsgPost = "Error: You did not enter any text."; //no post entered
				} elseif ($theSubject == "" || $theSubject == null)
				{
								$errMsgSubject = "Error: New threads require a subject."; //no subject entered
				}
				else
				{
								if (isset($_POST['email']))
								{
										
												$insertpost = "INSERT INTO forumtutorial_posts(forum,author,title,post,showtime,realtime,lastrepliedto,lastposter) values('$forum','$username','$theSubject','$thePost','$thedate','$thedate','$thedate','$username')";
												mysql_query($insertpost) or die("Could not insert post"); //insert post
												$insertemail = "INSERT INTO forum_email(user_id,topic_id,mailed) values('$id','$forumpostid','1')";
												mysql_query($insertemail) or die("Could not insert email"); //insert  email
												$updatepost = "UPDATE `users` SET `post_count`=`post_count`+'1' WHERE `Username`='$username'";
												mysql_query($updatepost) or die("Could not update post");
												header("Location: http://www.runningprofiles.com/members/index.php?page=forum&forum=$forum");
												exit;
 
								}
								else
								{
 
												//we now strip HTML injections
																				$insertpost = "INSERT INTO forumtutorial_posts(forum,author,title,post,showtime,realtime,lastrepliedto,lastposter) values('$forum','$username','$theSubject','$thePost','$thedate','$thedate','$thedate','$username')";
												mysql_query($insertpost) or die("Could not insert post"); //insert post
												$updatepost = "UPDATE `users` SET `post_count`=`post_count`+'1' WHERE `Username`='$username'";
												mysql_query($updatepost) or die("Could not update post");
												header("Location: http://www.runningprofiles.com/members/index.php?page=forum&forum=$forum");
												exit;
								}
				}
}
?>	
        	
<form action= 'http://www.runningprofiles.com/members/index.php?page=post&forum=<? echo
$forum ?>'  method='post' name='myform'>
	
		  <table class='maintables'>
			<tr class='headline'><td>Post a message</td></tr>
			<tr class='maintables'>
				<td>					
					<div align="center">
						<p><span style="color:red;"><?php echo $errMsgSubject; ?></span> <span style="color:red;"><?php echo
$errMsgPost; ?></span></p>
						<p><strong>Please enter you message title here.</strong><br>
						    <input class='inputinbox' type='text' name='subject' size='20' value="<?php echo
$theSubject;
 ?>">
				          <br>
					          </p>
				  </div>				</td>
			</tr>
			<tr class='maintables'>
				<td align="center">
						
							  <?php include 'bbcodebuttons.php'; ?>
					            
							            <textarea id="inputforum" class="inputforum" name='yourpost' rows='5' cols='40'><?php echo 
$thePost;
 ?></textarea>
				             
							<p> Notify me of replies.
							  <label>
							  <input type="checkbox" name="email" />
							  </label>
				  </p>
							<p><br>
					            <input type='submit'class="submit-btn" name='submit' value=''>	
					          <input type='submit' class="preview-btn"  name='preview' value=''>				
				                        </p></td>
			</tr>
		</td>
			</tr>
		</table>
         
</form>
    

Open in new window

0
 
Ray PaseurCommented:
Can you clarify this a bit: "now i type into my textbox this  [quote=me]this is a test[/quote] and it outputs this rather then the bbcode chnage ??"

Could you post a link to the script that is not working right and tell us how to see the test case?  Or could you isolate the issue a little bit.  You have posted hundreds of lines of code up there, and we could get you an answer faster if you could help us find a succinct test case.

Thanks, ~Ray
0

Featured Post

[Webinar] Cloud and Mobile-First Strategy

Maybe you’ve fully adopted the cloud since the beginning. Or maybe you started with on-prem resources but are pursuing a “cloud and mobile first” strategy. Getting to that end state has its challenges. Discover how to build out a 100% cloud and mobile IT strategy in this webinar.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now