Cortar caracteres de una cadena en PHP

Esta es una de las preguntas que más escucho, ¿Cómo puedo recortar una cadena en PHP? pues es bien fácil y vamos a ver dos opciones, que cada uno coja la que mejor se adapte a sus necesidades.

Substr

Esta manera es la más rápida, nos cortará la cadena por el número de caracteres que queramos

substr($palabra, $caracter_comienzo, $caracter_fin);

Personalmente recomendaría utilizar la función strlen($palabra) para verificar que la palabra que vamos a recortar tiene al menos ese número de caracteres ya que si no fallaría.

Podemos concatenar la función substr con la cadena “…” así sabremos cuando ha sido cortada y cuando no.

Explode

Mediante el uso de esta función podemos evitar cortar palabras, es decir, cortaremos una frase pero nunca dejaremos una palabra a medias, esta forma consume más recursos, pero quizá en algún momento nos pueda interesar usarla.

$frase = 'Este es el texto de prueba';
$num_palabras = 4;
$texto_partido = explode(' ',$frase); //separamos la frase por las palabras
for($i=0;$i<$num_palabras;$i++){
 echo $texto_partido[$i];
}

De esta manera, aunque no cortemos palabras, podemos pasarnos de largo si alguna frase contiene palabras muy grandes, pero como ya digo, que cada uno decida que opción le viene mejor.

Artículos relacionados



Comentarios en Cortar caracteres de una cadena en PHP

Hay 5 Comentarios en el artículo Cortar caracteres de una cadena en PHP, ¿a qué esperas para dar tu opinión?


  1. Lo que yo quiero saber es casi como las dos soluciones pero no la hayo para mi requerimiento. Tengo una web en donde una columna es solo de 150 pixeles de ancho pero hay personas que me escriben palabras grandes como “anticonstitucionadamente” o una url por decir “lo vi en http://flickrmrmovil.com/index.php?id=518&mar=pacifico&bla=bla&ble=ble” y las fuentes se me salenn del margen y no se limita a los 150 pixeles que le delego. Lo que quiero saber en PHP es si la palabra contiene mas de 50 caracteres me genere un guion y un break “” es decir “anticonstituciona-damente” o “lo vi en http://flickrmrmovil.com-/index.php?id=518&mar=pacifico&bla=bla&ble=ble” yo se que me entienden. Claro, los “<br” los interpreta los exploradores como un salto de linea…., Por favor ayuda

  2. En el mensale anterior coloque break y por eso se salto de linea. No se en que poense que no se distingue porque el explorador lo interpreto como saltom de linea. Yo se que me entienden. Saludos

  3. Emirodgar dice:

    @George el Ermitaño: Te entiendo, de todas maneras si sigues poniendo palabra-palabra todo junto no te saltará de línea y seguirá mostrándose todo junto.

    La solución es fácil, cuando la palabra supere el número de caracteres máximos, coge los X primeros caracteres, añadeles un “-” y un espacio ” ” y a continuación pone el resto de caracteres (siempre y cuando el resto no sigan superando el máximo.

    La única pega que le veo es que en el caso de enlaces te podría aparecer dividido con varios guiones y eso no queda bien, por ello, para enlaces puedes usar el servicio que utiliza twitter de tinyURL para acortar direcciones.
    http://tinyurl.com/

  4. michi122513 dice:

    Un pequeño error :S aquí el corregido:

    function cuttext ($text, $max)
    {
    $length = strlen ($text);

    if ($length > $max)
    {
    $tmptext = explode (’ ‘, $text);
    $text = ”;

    for ($i = 0; $max > strlen ($text) + strlen ($tmptext[$i]); $i++)
    {
    $text .= ‘ ‘ . $tmptext[$i];
    }

    if (! $text)
    {
    $text = substr ($tmptext[0], 0, $max);
    }
    $text .= ‘…’;
    }
    return $text;
    }

Deja un comentario