Non basta tagliare la stringa PRIMA di convertire i caratteri scusa?
Se non puoi puoi prima riconvertire le entities in caratteri normali, tagliare la stringa e ri-riconvertire i caratteri speciali con le entities.
Codice PHP:
$string = "Questo quà è il testo di prova";
$string = html_entity_decode($string);
$string = substr($string, 0, 15);
$string = htmlentities($string);