2010-06-10 12 views
38

Estoy buscando una forma de limitar una cadena en php y agregar ... al final si la cadena es demasiado larga.Longitud de cadena de límite

+0

que podrían encontrar [ 's ($ str) -> truncado ($ longitud)'] (https://github.com/delight-im/PHP-Str/ blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L233) o incluso ['s ($ str) -> truncateSafely ($ length)'] (https://github.com/delight-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc /src/Str.php#L246) útil, como se encuentra en [esta biblioteca independiente] (https://github.com/delight-im/PHP-Str). – caw

Respuesta

90

Puede usar algo similar a la de abajo:

if (strlen($str) > 10) 
    $str = substr($str, 0, 7) . '...'; 
+0

Supongo que no creía que se estuviera salteando las tareas de lectura de su tarea. – dlamblin

+0

Lo siento, no, no lo consideré. ¿Cuáles son las reglas para la tarea? Oh, espera, me acabo de dar cuenta, mi código ni siquiera funciona correctamente;) – bramp

+2

Es solo una regla comunitaria: http://meta.stackexchange.com/questions/10811/how-to-ask-and-withwer -homework-questions – dlamblin

0

para truncar una cadena proporcionada por el límite máximo sin que se rompa una palabra use esto:

/** 
* truncate a string provided by the maximum limit without breaking a word 
* @param string $str 
* @param integer $maxlen 
* @return string 
*/ 
public static function truncateStringWords($str, $maxlen) 
{ 
    if (strlen($str) <= $maxlen) return $str; 

    $newstr = substr($str, 0, $maxlen); 
    if (substr($newstr, -1, 1) != ' ') $newstr = substr($newstr, 0, strrpos($newstr, " ")); 

    return $newstr; 
} 
13

de PHP 4.0.6 , Hay una función de exactamente lo mismo que

función mb _ strimwidth se puede utilizar para su requerimiento

<?php 
echo mb_strimwidth("Hello World", 0, 10, "-yahooo!-"); 
//Hello W-yahooo!- 
?> 

Se tiene más opciones, sin embargo, aquí está la documentación de este mb_strimwidth

+0

La función wordwrap() también puede ser útil: http://www.w3schools.com/php/func_string_wordwrap.asp –

+0

Pero, personalmente, prefiero usar: $ s = preg_replace ('/ \ s +? (\ S +)? $/',' ', substr ($ s, $ START, $ LIMIT)); –

+2

@CyrilJacquart es mejor evitar el uso de expresiones regulares donde sea que no sea necesario. –

0

De otra manera para limitar una cadena en php y agregar texto readmore o como '...' usando el siguiente código

if (strlen(preg_replace('#^https?://#', '', $string)) > 30) { 
    echo substr(preg_replace('#^https?://#', '', $string), 0, 35).'&hellip;'; 
} 
0

En laravel, hay una cadena util función para esto, y se implementa de esta manera:

public static function limit($value, $limit = 100, $end = '...') 
{ 
    if (mb_strwidth($value, 'UTF-8') <= $limit) { 
     return $value; 
    } 

    return rtrim(mb_strimwidth($value, 0, $limit, '', 'UTF-8')).$end; 
} 
0

valor $ = str_limit; (, 7 'Esta cadena es muy, muy larga.')

// Este st ...

Cuestiones relacionadas