Problema resuelto.
He encontrado la solucion
aquí
El error estaba en la funcion str_word_count(), que si no se define un charlist con todos los caracteres especiales elimina los caracteres especiales al no tomarlos como palabras o entidades. la solucion es sustituir str_word_count() por un explode() que corte la cadena por los espacios.
Os dejo la funcion lista, por si a alguien le sucede lo mismo.
Código PHP:
function cortar_frase($frase_entrada,$cortar){
$frase_corta=substr($frase_entrada,0,$cortar); // obtener la frase cortada.
$palabras=explode(' ',$frase_corta); // obtener array con las palabras.
$total_palabras=count($palabras)-1; // contar total array elementos y restar 1 elementos
if($total_palabras>8){
$palabras=array_splice($palabras,0,$total_palabras); // le quitamos la ultima palabra.
$frase_salida=implode(' ',$palabras); // y concatenamos con el espacio hacia una cadena.
$frase_salida .= "..."; // se añaden los puntos suspensivos a la cadena obtenida..
}else{
$frase_salida =$frase_entrada;
}
return $frase_salida;
}