Truncar una cadena a los primeros n caracteres de una cadena y agregar tres puntos si se elimina algún carácter

Resuelto Alex asked hace 54 años • 21 respuestas

¿Cómo puedo obtener los primeros n caracteres de una cadena en PHP? ¿Cuál es la forma más rápida de recortar una cadena a un número específico de caracteres y agregar '...' si es necesario?

Alex avatar Jan 01 '70 08:01 Alex
Aceptado
//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';

Actualizar:

Basado en una sugerencia para verificar la longitud (y también garantizar longitudes similares en cuerdas recortadas y sin recortar):

$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;

Entonces obtendrás una cadena de máximo 13 caracteres; 13 (o menos) caracteres normales o 10 caracteres seguidos de '...'

Actualización 2:

O como función:

function truncate($string, $length, $dots = "...") {
    return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}

Actualización 3:

Ha pasado un tiempo desde que escribí esta respuesta y ya no uso este código. Prefiero esta función que evita romper la cadena en medio de una palabra usando la wordwrapfunción:

function truncate($string,$length=100,$append="…") {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n", $string, 2);
    $string = $string[0] . $append;
  }

  return $string;
}
Brendan Bullen avatar Jul 01 '2010 21:07 Brendan Bullen

Esta funcionalidad se ha integrado en PHP desde la versión 4.0.6. Ver los documentos .

echo mb_strimwidth('Hello World', 0, 10, '...');

// outputs Hello W...

Tenga en cuenta que trimmarker(los puntos suspensivos de arriba) están incluidos en la longitud truncada.

bruchowski avatar Jul 03 '2014 22:07 bruchowski

La extensión Multibyte puede resultar útil si necesita controlar el juego de caracteres de cadena.

$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
  $string = mb_substr($string, 0, $length - 3, $charset) . '...';
}
Emil Vikström avatar Jul 01 '2010 21:07 Emil Vikström