AbydosGater Posted May 16, 2007 Share Posted May 16, 2007 Hey guys, Im working on a bbCode script that uses the same tags to open and close. IE: ++Bold Test++ The first ++ would be replaced with <b> and the second with </b>. I came up with the following code. <?php function BBcode($tag, $identifier, $string){ $open = '<' . $tag . '>'; $close = '<' . $tag . '/>'; $current = $open; $i = 0; $totalTagsSplit = split($identifier, $string); $totalTags = count($totalTagsSplit); if ($totalTags >= 1){ for ($i = 0; $i <= $totalTags; $i++){ $string = str_replace($identifier, $current, $string); if ($current == $open){ $current = $close; echo "opening"; } elseif ($current == $close){ $current = $open; echo "closing"; } $i++; } return $string; } } //// //$tag being the HTML tag you want to use. //$identifier being the string used to open and close the tag. //$string being the actual string you want to manipulate. //// ?> But its replacing everything with the same opening tag and never closes it. can anyone see what i did wrong? Andy Link to comment https://forums.phpfreaks.com/topic/51677-my-own-bb-code-gone-wrong/ Share on other sites More sharing options...
AbydosGater Posted May 17, 2007 Author Share Posted May 17, 2007 Hmm anyone any idea? Its doing my head in. I cant see anything wrong with the code so it has to be something i dont know. Can anyone spot it? Andy Link to comment https://forums.phpfreaks.com/topic/51677-my-own-bb-code-gone-wrong/#findComment-255401 Share on other sites More sharing options...
Lumio Posted May 17, 2007 Share Posted May 17, 2007 That's not BB, but ok. I made the following script for an intern communication-area (where only admins are): <?php class SIMPLE_CODE { function simplecode($s) { $s = nl2br(htmlspecialchars($s)); $ns = ''; //underlined $pos = -1; while(($pos = strpos($s, '__')) !== false) { $b=false; $bs=0; $i=-1; $last=-1; while (($back = strpos($s, '\\', $i+1)) !== false) { if ($back < $pos) { if ($b === false) $b = true; else $b = false; $bs++; $last=$back; $i = $back; }else { $back = $last; break; } } if ($b===true) $bs--; $bs = $bs/2; if ($b===true) { $ns .= substr($s, 0, $pos-1-$bs).'__'; //echo $ns.'<br /><br /><br />'; $s = substr($s, $pos+2); continue; }else { $end_pos = strpos($s, '__', $pos+1); if ($end_pos !== false) { $ns .= substr($s, 0, $pos); $ns .= '<you>'.substr($s, $pos+2, ($end_pos-$pos-2)).'</you>'; $s = substr($s, $end_pos+2); }else break; } } $ns .= $s; $s = $ns; $ns = ''; //italic $pos = -1; while(($pos = strpos($s, '//')) !== false) { $b=false; $bs=0; $i=-1; $last=-1; while (($back = strpos($s, '\\', $i+1)) !== false) { if ($back < $pos) { if ($b === false) $b = true; else $b = false; $bs++; $last=$back; $i = $back; }else { $back = $last; break; } } if ($b===true) $bs--; $bs = $bs/2; if ($b===true) { $ns .= substr($s, 0, $pos-1-$bs).'//'; //echo $ns.'<br /><br /><br />'; $s = substr($s, $pos+2); continue; }else { $end_pos = strpos($s, '//', $pos+1); if ($end_pos !== false) { $ns .= substr($s, 0, $pos); $ns .= '<i>'.substr($s, $pos+2, ($end_pos-$pos-2)).'</i>'; $s = substr($s, $end_pos+2); }else break; } } $ns .= $s; $s = $ns; $ns = ''; //bold $pos = -1; while(($pos = strpos($s, '**')) !== false) { $b=false; $bs=0; $i=-1; $last=-1; while (($back = strpos($s, '\\', $i+1)) !== false) { if ($back < $pos) { if ($b === false) $b = true; else $b = false; $bs++; $last=$back; $i = $back; }else { $back = $last; break; } } if ($b===true) $bs--; $bs = $bs/2; if ($b===true) { $ns .= substr($s, 0, $pos-1-$bs).'**'; //echo $ns.'<br /><br /><br />'; $s = substr($s, $pos+2); continue; }else { $end_pos = strpos($s, '**', $pos+1); if ($end_pos !== false) { $ns .= substr($s, 0, $pos); $ns .= '<b>'.substr($s, $pos+2, ($end_pos-$pos-2)).'</b>'; $s = substr($s, $end_pos+2); }else break; } } $ns .= $s; return $ns; } function format($txt) { $ns = ''; $pos= -1; while (($pos = strpos($txt, '<?')) !== false) { $end_pos = strpos($txt, '?>', $pos+1); if ($end_pos !== false) { $next_pos = strpos($txt, '<?', $end_pos); if ($next_pos === false) $next_pos = strlen($txt); /* next_pos erneuern */ //Suche nach ' $qo = false; $q =-1; while (($q = strpos($txt, "'", $q+1)) !== false) { if ($qo === false) $qo = true; else $qo = false; if ($qo === false && $next_pos < $q && $ql < $next_pos) { $next_pos = strpos($txt, '?>', $q+1); } if ($qo === false) $ql = $q; else $ql = strlen($txt); } /* end_pos erneuern */ //Suche nach ' $qo = false; $q =-1; while (($q = strpos($txt, "'", $q+1)) !== false) { if ($q >= $next_pos) break; if ($qo === false) $qo = true; else $qo = false; if ($qo === false && $end_pos < $q && $q < $next_pos) { $end_pos = strpos($txt, '?>', $q+1); } } //Suche nach " $qo = false; $q =-1; while (($q = strpos($txt, "'", $q+1)) !== false) { if ($q >= $next_pos) break; if ($qo === false) $qo = true; else $qo = false; if ($qo === false && $end_pos < $q && $q < $next_pos) { $end_pos = strpos($txt, '?>', $q+1); } } $ns.= $this->simplecode(substr($txt, 0, $pos)); $code = substr($txt, $pos, ($end_pos-$pos+2)); $output_result = ''; ob_start(); highlight_string($code); $output_result = ob_get_contents(); ob_end_clean(); $ns .= $output_result; $e = false; if (substr($code, 0, 5) == '<?php') $code = substr($code, 5); elseif (substr($code, 0, 3) == '<?=') { $code = 'echo '.substr($code, 3); $e = true; } elseif (substr($code, 0, 2) == '<?') $code = substr($code, 2); $code = substr($code, 0, -2); if ($e === true) $code .= ';'; $output_result = $code_result = ''; ob_start(); $code_result = @eval($code); $output_result = ob_get_contents(); ob_end_clean(); if ($code_result === false) $ns .= '<span class="error"><br />-Code contains errors</span>'; else { $ns .= '<span class="info"><br />-Code contains no errors</span>'; if (strlen($code_result) > 0) { (strlen($code_result) > 32) && $code_result = substr($code_result, 0, 32).'...'; $ns .= '<span class="grey1"><br /><span class="bi">-Result:</span> '.htmlspecialchars($code_result).'</span>'; } } if ($output_result !== false && strlen($output_result) > 0) { $ns .= '<span class="grey2"><br /><span class="bi">-Output:</span> '; if (strlen($output_result) > 32) $output_result = substr($output_result, 0, 32).'...'; $ns .= htmlspecialchars($output_result); $ns .= '</span>'; } $txt = substr($txt, $end_pos+2); }else break; } $ns .= $this->simplecode($txt); return $ns; } } ?> Use it like this: <?php $c = new SIMPLE_CODE; echo $c->format('**bold** //italic// __underlined__'); ?> //edit: If you want to use it for open posting, please remove the eval()-command Link to comment https://forums.phpfreaks.com/topic/51677-my-own-bb-code-gone-wrong/#findComment-255428 Share on other sites More sharing options...
taith Posted May 17, 2007 Share Posted May 17, 2007 personally i made this :-) translates `b into <b>/</b> <?php function filter_colourize($string){ while(($pos=strpos($string,"`")) !== false){ $tag=substr($string,$pos+1,1); $pre=substr($string,0,$pos); $post=substr($string,$pos+2); switch($tag){ case "0": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:white;">'; break; case "1": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:olive;">'; break; case "2": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:orange;">'; break; case "3": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:plum;">'; break; case "4": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:pink;">'; break; case "5": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:purple;">'; break; case "6": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:red;">'; break; case "7": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:gray;">'; break; case "8": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:green;">'; break; case "9": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:hotpink;">'; break; case "!": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:silver;">'; break; case "@": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:gold;">'; break; case "#": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:lightslategray;">'; break; case "$": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:steelblue;">'; break; case "%": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:ivory;">'; break; case "^": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:tan;">'; break; case "&": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:teal;">'; break; case "a": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:yellow;">'; break; case "b": if(!$nestedtags[bold]){ $nestedtags[bold]=true; $colour.='<b>'; }else{ $nestedtags[bold]=false; $colour.='</b>'; } break; case "c": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:cornsilk;">'; break; case "d": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:navy;">'; break; case "e": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:aqua;">'; break; case "f": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:cyan;">'; break; case "g": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:beige;">'; break; case "h": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:lime;">'; break; case "i": if(!$nestedtags[italics]){ $nestedtags[italics]=true; $colour.='<i>'; }else{ $nestedtags[italics]=false; $colour.='</i>'; } break; case "j": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:blue;">'; break; case "k": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:linen;">'; break; case "l": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:azure;">'; break; case "m": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:black;">'; break; case "n": $colour.='<br>'; break; case "o": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:magenta;">'; break; case "p": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:brown;">'; break; case "q": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:cadetblue;">'; break; case "r": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:maroon;">'; break; case "s": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:coral;">'; break; case "t": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:darkseagreen;">'; break; case "u": if(!$nestedtags[underline]){ $nestedtags[underline]=true; $colour.='<u>'; }else{ $nestedtags[underline]=false; $colour.='</u>'; } break; case "v": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:chocolate;">'; break; case "w": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:crimson;">'; break; case "x": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:bisque;">'; break; case "y": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:orchid;">'; break; case "z": if(!$nestedtags[colour]) $nestedtags[colour]=true; else $colour.='</span>'; $colour.='<span style="color:peru;">'; break; } $string=$pre.$colour.$post; unset($colour); $i=$pos+1; } if($nestedtags[italics]) $string .= '</i>'; if($nestedtags[underline]) $string .= '</u>'; if($nestedtags[bold]) $string .= '</b>'; if($nestedtags[colour]) $string .= '</span>'; return $string; } ?> Link to comment https://forums.phpfreaks.com/topic/51677-my-own-bb-code-gone-wrong/#findComment-255435 Share on other sites More sharing options...
obsidian Posted May 17, 2007 Share Posted May 17, 2007 You don't have a closing tag declared: <?php // Try changing this: $close = '<' . $tag . '/>'; // To this: $close = '</' . $tag . '>'; ?> Link to comment https://forums.phpfreaks.com/topic/51677-my-own-bb-code-gone-wrong/#findComment-255440 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.