<?php function BBcodeOut($object) { '![url[=]?(.*?)?](.*?)[/url]!sie', '!(.*?)!sie', '!(.*?)!sie', '!(.*?)!sie', '![quote[=]?(.*?)?](.*?)[/quote]!sie', '!(.*?)!sie', '!(.*?)!sie', '!(.*?)
!sie' ); '\"<a href=\"http://\". str_replace( \"http://\", \"\", ( \"$1\"==\"\"?\"$2\":\"$1\" ) ) .\"\" target=\"_blank\">\". ( strlen( \"$2\" )>25?substr( \"$2\", 0, 10 ).\"...\".substr( \"$2\", -10 ):\"$2\" ) .\"</a>\"', '\"<strong>$1</strong>\"', '\"<i>$1</i>\"', '\"<u>$1</u>\"', '( \"$1\"!==\"\"?showUsername( \"$1\" ).\" <strong>napisał(a):</strong><br />\":\"<strong>Cytat:</strong><br />\" ) .\"<div class=\"quote_box\">$2</div>\"', '\"<span style=\"color:$1;\">$2</span>\"', '\"<span style=\"font: 10px $1;\">$2</span>\"', '\"<ul>\". str_replace( \"[/*]\", \"</li>\", str_replace( \"[*]\", \"<li>:arrow: \", \"$1\" ) ) .\"</ul>\"' ); return $object; } ?>
Problem polega na tym, że opisałem stronę XHTML'em, a wiadomo że jeśli znaczniki krzyżują się wyświetli się drzewko zamiast strony. Aby temu zapobiec postanowiłem napisać blokadę przed mieszaniem tagów. Oto co wymyśliłem:
<?php function safeBBcode( $object ) { $rozbity = preg_split( '!([/[*a-z]*])([^[^].]*?[[^/][*a-z]*=?.*?])!si', $object, -1, PREG_SPLIT_DELIM_CAPTURE ); { { $string = $rozbity[$x] . $rozbity[$x+1]; } else { $string = $rozbity[$x] . $rozbity[$x+1]. $rozbity[$x+2]; $x++; } for($v=0;$v<count( $matches_1[1] );$v++) { $y--; if( $matches_1[1][$y] !== $matches_2[1][$v] ) { return $string; } } $string = ''; $x++; } return 0; } ?>
Nadal jednak nie działa w 100%... ma problem ze sprawdzaniem, jeśli wewnątrze jednego tagu zawarte są 2 lub więcej innych np:
Cytat
[aa][bb][/bb][cc][/cc][/aa]
Nie mam pomysłów jak to poprawić, więc proszę o pomoc
