","", "","", "","", "", "
  • ","
  • ", "","", "
    ","
    ", "
    ","
    ", "
    ","
    ", "",""); $post = bbCleaner($post); /* Convert all the basic BBCodes */ $post = str_ireplace($bbcode,$html,$post); /* Now for the more complicated BBCode conversion */ $post = runBBScan($post); $post = str_replace("\n","
    ",$post); /* Finally, process smilies */ if($isOsimo){ $post = processSmilies($post); } return $post; } /* No-BBCode Scan * Scans the post and makes sure that * everything in-between [nocode][/nocode] * does not get interpreted as bbcode */ function runNoBBScan($post,$offset=0) { $type = "nocode"; $tag = "[$type]"; $pos = stripos($post,$tag,$offset); if($pos!==false) { $offset = $pos+strlen($tag); $pos2 = stripos($post,"[/$type]",$offset); if($pos2!==false) { $data = substr($post,$offset,($pos2-$offset)); $offset = $pos2 + strlen("[/$type]"); } $edited = str_replace("[","[",$data); $edited = str_replace("]","]",$edited); $post = substr_replace($post,$edited,$pos,(($pos2+strlen("[/$type]"))-$pos)); return runNoBBScan($post,$offset); } return $post; } /* * BBCode cleaner * Checks to make sure all tags are closed. * Not too fancy, but avoids html errors */ function bbCleaner($post) { $bbcode = array( "b", "i", "u", "list", "*", "code", "right", "left", "center" ); foreach($bbcode as $tag) { /* Replace all tags with lower-case versions */ $post = str_ireplace("[$tag]","[$tag]",$post); $post = str_ireplace("[/$tag]","[/$tag]",$post); /* Count number of open tags */ $open = substr_count($post,strtolower("[$tag]")); //$open += substr_count($post,strtoupper("[$tag]")); /* Count number of closed tags */ $closed = substr_count($post,strtolower("[/$tag]")); //$closed += substr_count($post,strtoupper("[/$tag]")); /* Case 1: More open than closed */ if($open>$closed) { for($i=0;$i<($open-$closed);$i++) { $post .= "[/$tag]"; } } /* Case 2: More closed than open */ elseif($closed>$open) { for($i=0;$i<($closed-$open);$i++) { $post = "[$tag]".$post; } } } return $post; } function runBBScan($post) { $post = fancyBB($post,'email'); $post = fancyBB($post,'url'); $post = fancyBB($post,'size'); $post = fancyBB($post,'font'); $post = fancyBB($post,'color'); $post = fancyBB($post,'img'); $post = fancyBB($post,'spoiler'); $post = fancyBB($post,'quote'); $post = fancyBB($post,'align'); $post = fancyBB($post,'cell'); $post = fancyBB($post,'table'); return $post; } function fancyBB($post,$type,$offset=0) { $tag = "[$type]"; $pos = stripos($post,$tag,$offset); if($pos!==false) { $offset = $pos+strlen($tag); $pos2 = stripos($post,"[/$type]",$offset); if($pos2!==false) { $data = substr($post,$offset,($pos2-$offset)); $offset = $pos2 + strlen("[/$type]"); } } else { /* check for tag with attribute */ $_tag = "[$type="; $_pos = stripos($post,$_tag,$offset); if($_pos!==false) { /* Attr found, get value */ $offset = $_pos+strlen($_tag); $_pos2 = strpos($post,']',$offset); if($_pos2!==false) { /* Got attr value */ $data1 = substr($post,$offset,($_pos2-$offset)); $offset = $_pos2+1; $_pos3 = stripos($post,"[/$type]",$offset); if($_pos3!==false) { $data2 = substr($post,$offset,($_pos3-$offset)); $offset = $_pos3 + strlen("[/$type]"); $attr = true; } } } else { return $post; } } if($type=='email') { if($attr) { $search = "[email=".$data1."]".$data2."[/email]"; if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); } $replace = "$data2"; } else { $search = "[email]".$data."[/email]"; $replace = "$data"; } $post = str_ireplace($search,$replace,$post); } if($type=='url') { if($attr) { $search = "[url=".$data1."]".$data2."[/url]"; if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); } if(strpos($data1,"mailto:")===false) { $data1 = urlFilter($data1); } $data2 = runBBScan($data2); $replace = "$data2"; } else { $search = "[url]".$data."[/url]"; $data = urlFilter($data); $replace = "$data"; } $post = str_ireplace($search,$replace,$post); } if($type=='img') { $search = "[img]".$data."[/img]"; $data = urlFilter($data); $replace = "\"image\""; $post = str_ireplace($search,$replace,$post); } if($type=='size') { $search = "[size=".$data1."]".$data2."[/size]"; $data2 = runBBScan($data2); if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); } if(strpos($data1,"px")!==false){ $replace = "{$data2}"; } else { $replace = "{$data2}"; } $post = str_ireplace($search,$replace,$post); } if($type=='font') { $search = "[font=".$data1."]".$data2."[/font]"; $data2 = runBBScan($data2); if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); } $replace = "{$data2}"; $post = str_ireplace($search,$replace,$post); } if($type=='color') { $search = "[color=".$data1."]".$data2."[/color]"; $data2 = runBBScan($data2); if(strpos($data1,"\"")!==false){ $data1 = str_replace("\"","",$data1); } $replace = "{$data2}"; $post = str_ireplace($search,$replace,$post); } if($type=='spoiler') { $search = "[spoiler]".$data."[/spoiler]"; $data = runBBScan($data); $replace = "{$data}"; $post = str_ireplace($search,$replace,$post); } if($type=='quote') { if($attr) { $search = "[quote=".$data1."]".$data2."[/quote]"; $data2 = runBBScan($data2); $replace = "
    Quote: original post by {$data1}
    ".trim($data2)."
    "; $post = str_ireplace($search,$replace,$post); } else { $search = "[quote]".$data."[/quote]"; $data = runBBScan($data); $replace = "
    Quote:
    ".trim($data)."
    "; $post = str_ireplace($search,$replace,$post); } } if($type=='align') { $search = "[align=".$data1."]".$data2."[/align]"; $data2 = runBBScan($data2); $replace = "
    ".$data2."
    "; $post = str_ireplace($search,$replace,$post); } if($type=='table') { if($attr){ $search = "[table=".$data1."]".$data2."[/table]"; $data2 = str_replace("\n","",$data2); $data2 = runBBScan($data2); $table_attr = parseTableAttr($data1); $replace = "".$data2."
    "; $post = str_ireplace($search,$replace,$post); } else{ $search = "[table]".$data."[/table]"; $data = str_replace("\n","",$data); $data = runBBScan($data); $replace = "".$data."
    "; $post = str_ireplace($search,$replace,$post); } } if($type=='cell') { if($attr){ $search = "[cell=".$data1."]".$data2."[/cell]"; $data2 = runBBScan($data2); $cell_attr = parseTableCellAttr($data1); $data2 = str_replace("\n","
    ",$data2); $replace = "".$data2.""; $post = str_ireplace($search,$replace,$post); } else{ $search = "[cell]".$data."[/cell]"; $data = runBBScan($data); $data = str_replace("\n","
    ",$data); $replace = "".$data.""; $post = str_ireplace($search,$replace,$post); } } if($offset"; $j++; } $post = str_replace($_SESSION['osimo']['smilies']['code'],$replace,$post); } return $post; } ?>