<?php
function activateBbTags($str) {
$str = preg_replace('{\[b\](.+?)\[/b\]}', '<b>$1</b>', $str);
$str = preg_replace('{\[i\](.+?)\[/i\]}', '<i>$1</i>', $str);
$str = preg_replace('{\[color=(.*?)\](.+?)\[/color\]}', '<font color="$1">$2</font>', $str);
return $str;
}
/**
* close all open xhtml tags at the end of the string
*
* @author Milian Wolff <[url]http://milianw.de[/url]>
* @param string $html
* @return string
*/
function closetags($html){
#put all opened tags into an array
preg_match_all("#<([a-z]+)( .*)?(?!/)>#iU",$html,$result);
$openedtags=$result[1];
#put all closed tags into an array
preg_match_all("#</([a-z]+)>#iU",$html,$result);
$closedtags=$result[1];
$len_opened = count($openedtags);
# all tags are closed
if(count($closedtags) == $len_opened){
return $html;
}
$openedtags = array_reverse($openedtags);
# close tags
for($i=0;$i<$len_opened;$i++) {
if (!in_array($openedtags[$i],$closedtags)){
$html .= '</'.$openedtags[$i].'>';
} else {
unset($closedtags[array_search($openedtags[$i],$closedtags)]);
}
}
return $html;
}
function conciseStr($str, $maxLength, $endChar){
if (strlen($str) <= $maxLength) return closeTags(activateBbTags($str));
$str = activateBbTags($str); // Ваша функция, которая активирует нужные бб-тэги
$str = substr($str, 0, strpos($str, $endChar, $maxLength));
$str = closeTags($str); // Эта функция выше
return $str;
}
$text = 'текст текст текст текст [IMG=sdfsd7fsdf7dfb7dfb.jpg] текст текст текст текст';
echo conciseStr($text, 35, " ");