L'idée serait un truc ressemblant à ça :
function killnested($text, $start, $stop, $level) {
$result = '';
$nested = 0;
$nextstart = strpos($text, $start);
$nextstop = strpos($text, $stop);
$lastcut = 0;
while (($nextstart !== false) || ($nextstop !== false))
{
if (($nextstop === false) || (($nextstart !== false) && ($nextstart < $nextstop)))
{
if ($nested++ == $level)
$result .= substr($text, $lastcut, $nextstart-$lastcut);
$nextstart = strpos($text, $start, $nextstart+1);
} else {
if (--$nested == $level)
$lastcut = $nextstop + strlen($stop);
if ($nested < 0) $nested = 0;
$nextstop = strpos($text, $stop , $nextstop +1);
}
}
if ($nested <= $level)
$result .= substr($text, $lastcut);
return $result;
}
Avec $text le texte du post, $start = '[cite]' $stop = '[/cite]' et $level précisé par l'utilisateur (0 vire toutes les citations, 1 garde le premier niveau d'imbrication, etc).

