
Existen multitud de funciones y métodos sobre el tipo de datos cadena (String) en PHP. Normalmente, cuando queremos acortar o ajustar una cadena a un determinado número de caracteres, usamos la función substr de la siguiente forma:
1 | $nuevaCadena = substr ( $cadena, 0, $longitud ) |
donde la variable $longitud tendrá el valor del tamaño de cadena resultante que queremos conseguir.
Imagina ahora que queremos realizar el ajuste o recorte de una cadena de texto que vamos a usar en una página web como entradilla de alguna noticia, artículo o similar. Si usamos directamente la función substr sobre la cadena a ajustar, esta función no va a hacer distinción entre letras, palabras y/o espacios en blanco, por lo que el resultado puede ser una cadena donde la última palabra esté cortada.
Vamos a ver como podemos solventar esto, haciendo que, dada una cadena y una longitud, ésta se ajuste a dicho tamaño, teniendo en cuenta que no debe cortar palabras. Para ello, fíjate en la siguiente función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?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; } |
Esta función toma como parámetros una cadena y la longitud deseada.
- En primer lugar, elimina de dicha cadena cualquier etiqueta HTML que pueda tener.
- Seguidamente, crea una cadena con la longitud del tamaño dado.
- Acto seguido, separa la cadena en palabras, creando un array contenedor de ellas, y mira si al final de la cadena existe un espacio en blanco. En caso negativo, elimina la última entrada del array, evitando así las palabras cortadas.
- Por último, crea una cadena con las palabras del array y la devuelve.
Vamos a ver un ejemplo. Si tenemos la siguiente cadena de caracteres y aplicamos la función anterior sobre la misma:
1 2 3 4 5 6 7 8 9 10 | <?php $cadena = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor '. 'incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis '. 'nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. '. 'Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore '. 'eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, '. 'sunt in culpa qui officia deserunt mollit anim id est laborum.'; echo trimString($cadena, 75); |
el resultado será el siguiente:
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod… |
Si en vez de usar esta función, hubiéramos usado la función substr, el resultado hubiese sido diferente:
1 | echo substr($cadena, 0, 75).'…'; |
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tem… |
dejando la última palabra de la cadena a medias.
Como puedes ver, este último resultado no quedaría muy bien, como entradilla, en una página web, ya que estamos cortando palabras. Resulta más idóneo el resultado obtenido al llamar a la función trimString, la cual ha evitado los posibles cortes eliminando aquellas palabras que se quedan a medias.

Un pensamiento sobre “Cómo ajustar o recortar una cadena de texto a una determinada longitud en PHP”
Gracias, lo use para corregir un error al crear unos xml.