Ваша проблема в том, что вам нужно придумать некоторые правила. Если строка
$str = '[img]..[img] some text here... ';
Тогда вы проигнорируете изображение и просто извлечете текст? Если это так, вы можете использовать некоторые регулярные выражения, чтобы убрать весь BB-код из копии строки. Но тогда он будет рассматривать текст с обеих сторон в экземпляре, таком как
$str = 'txt txt [img]....[/img] txtxtxt ; // will become $copystr = 'txttxt txttxttxt';
Вы можете получить 'маркер' со строками первого вхождения '[', '[img]' или массивом элементов, которые вы не хотите разрешать. Затем прокрутите их, и если они меньше желаемой длины «предварительного просмотра», то используйте эту позицию ++ в качестве вашей длины.
<?php
function str_preview($str,$len){
$occ = strpos('[',$str);
$occ = ($occ > 40) ? 40 : $occ;
return substr($str,0,++$occ);
}
?>
что-то подобное сработало бы, если вы хотите подняться до первого '['. Если вы хотите игнорировать [B] (или другие) и разрешить их применение, тогда вы захотите написать более сложный шаблон фильтрации, который позволяет это. Или - если вы хотите убедиться, что он не обрезается в середине слова, вы должны рассмотреть strpos ('' ..), используя смещение, чтобы изменить длину так, как вам нужно. Не будет волшебного 1 вкладыша, чтобы справиться с этим.