Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/10/2020, 08:07
Ember
 
Fecha de Ingreso: diciembre-2004
Ubicación: Madrid
Mensajes: 550
Antigüedad: 19 años, 4 meses
Puntos: 28
Acortar texto en cadena sin cortar palabra

Buenas tardes.

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 $cadena0$longitud );
        
        
//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, -1PREG_SPLIT_NO_EMPTY ); 
        
        
//Buscamos la expresión regular al final de la cadena
        
preg_match $regExp$cadena$ultimo0$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;

Mi intención es mostrar un máximo de 68 caracteres porque creo títulos de páginas web a partir de páginas dinámicas. Entonces unos títulos pueden ocupar 65 caracteres y otros 85 o más. La intención es que muestre un máximo de 68 pero sin cortar la última palabra. Esa función lo hace bien pero como la última palabra lleve un carácter extraño, la cosa no sale bien.

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 :)