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).