web-dev-qa-db-fra.com

Limiter la longueur de la chaîne

Je cherche un moyen de limiter une chaîne en php et d'ajouter ... à la fin si la chaîne était trop longue.

46
Belgin Fish

Vous pouvez utiliser quelque chose de similaire à ce qui suit:

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

A partir de php 4.0.6, il existe une fonction pour la même chose 

la fonction mb _strimwidth peut être utilisée pour vos besoins 

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

Il a plus d’options cependant, voici la documentation pour cela mb_strimwidth

Vous pouvez utiliser la fonction wordwrap() puis exploser sur une nouvelle ligne et prendre la première partie, si vous ne souhaitez pas scinder les mots.

$str = 'Stack Overflow is as frictionless and painless to use as we could make it.';
$str = wordwrap($str, 28);
$str = explode("\n", $str);
$str = $str[0] . '...';

Source: https://stackoverflow.com/a/1104329/1060423

Si vous ne voulez pas séparer les mots, utilisez simplement la fonction php substr .

echo substr($str, 0, 28) . '...';
6
Sev

Faites un peu de travail avec les fonctions de chaîne du manuel en ligne php . Vous voudrez utiliser strlen dans un paramètre de comparaison, substr pour le couper si vous en avez besoin, et le opérateur de concaténation avec "..." ou "&hellip;"

3
dlamblin

Dans Laravel, il existe une fonction string util pour cela, et elle est implémentée de la manière suivante:

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;
}
1
geckob

D'une autre manière de limiter une chaîne en php et d'ajouter plus de texte ou comme '...' utilisant le code ci-dessous

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

Pour tronquer une chaîne fournie par la limite maximale sans casser un mot, utilisez ceci:

/**
 * 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;
}
0
crmpicco