He estado buscando en Google opciones para esto que pretendo pero no doy con una solución correcta. He probado algunas funciones y me dan error. La que más se aproxima es ésta
Código PHP:
function trimString ( $cadena, $longitud = 128 ) {
//Eliminamos las etiquetas HTML
$cadena = trim ( strip_tags ( $cadena ) );
if ( strlen ( $cadena ) > $longitud ) {
//Acortamos la cadena a la longitud dada
$cadena = substr ( $cadena, 0, $longitud + 1 );
//Expresión regular de espacio en blanco
$regExp = "/[\s]| /";
//Dividimos la cadena en palabras y la guardamos en un array
$palabras = preg_split ( $regExp, $cadena, -1, PREG_SPLIT_NO_EMPTY );
//Buscamos la expresión regular al final de la cadena
preg_match ( $regExp, $cadena, $ultimo, 0, $longitud );
if ( empty ( $ultimo ) ) {
//Si la última palabra no estaba seguida por un espacio en blanco,
//la eliminamos del conjunto de palabras
array_pop ( $palabras );
}
//Creamos la cadena resultante por la unión del conjunto de palabras
$cadena = implode ( ' ', $palabras ) . '…';
}
return $cadena;
}
Me explico. Si la última palabra dentro de los 68 caracteres que voy a mostrar es Madrid, la función lo hace bien. Pero si en vez de Madrid, la palabra es Çela (población de Albania), entonces se corta antes. Por ejemplo, "XXXXXX Madrid" (para Madrid) y "XXXXXX" (para Çela). La Ç evita que salga esa palabra a pesar de que debería salir porque tiene 4 caracteres frente a los 5 de Madrid, y esta palabra sí sale. No sé me explico. La cadena de Madrid es más larga que la de Çela y aún así sale Madrid pero no Çela...
No tengo claro qué tendría que tocar en esa función para que salgan palabras con caracteres especiales, o si merece la pena usar otra función.
Muchas gracias :)