Kod
<b>test1<i></u>test2<u></b>test3</i></div><i
po przejściu przez funkcję substr_safe, daje:
Kod
<b>test1<i>test2<u>test3</u></i></b>
Funkcję mozna też stosować tylko z jednym parametrem; wtedy tylko nieco uporządkuje kod bez żadnego przycinania.
Miałem wcześniej kilka problemów, które wpływały na działanie funkcji m.in. z interpretacją błędnego HTML'u, niedomkniętymi tagami, tagami zamykającymi bez tagów otwierających itp, prosiłem o pomoc na forum ale wszystko wyszło na prostą i wklejam działający kod.

Pozdrawiam i życzę miłego użytkowania
parametry:
$str - string, tekst wejściowy
$start,$count - int, tak jak drugi i trzeci parametr do zwykłego substr
$cut - bool, określa, czy ucinać wyrazy
na wyjściu funkcja daje odpowiednio sformatowany tekst wyjściowy
<?php /* substr_safe by Louner ( rozjazd@gmail.com ) */ function substr_safe($str,$start=0,$count=0,$cut = false) { " ", "\n", "r", "\t" ); if( $count == 0 ) { } if( $cut == false ) { $cut_front = false; $cut_back = false; $stop = $start+$count-1; $cut_front = true; } $cut_back = true; } } if( $cut == false && ( $cut_back == true || $cut_front == true ) ) { $max = 0; foreach( $whitespace as $c ) { if( $c_min < $min ) { $min = $c_min; } if( $c_max > $max ) { $max = $c_max; } } else { continue; } } if( $min < $max ) { if( $cut_back == true ) { } if( $cut_front == true ) { } } } $matches_full = $matches[0]; $matches = $matches[1]; foreach( $matches as $key => $tag ) { } else { } } else { } } else { // opening } } } foreach( $stack as $tag ) { $str .= '</'.$tag.'>'; } return $str; } ?>