oda var şu şekilde, sorun neden kaynaklanıyor anlamış değilim. Aslında sorun tam olarak substr yaptığımda son Türkçe harfte meydana geliyor. Diğer Türkçe harfler düzgün geliyor.
htmlspecialchars_decode() denediniz mi
Evet. Arkadaşın dediği gibi mb_substr de çözüm olabilir. mb_substr($str, 0, 100, 'utf-8');