Je cherche un moyen de limiter une chaîne en php et d'ajouter ... à la fin si la chaîne était trop longue.
Vous pouvez utiliser quelque chose de similaire à ce qui suit:
if (strlen($str) > 10)
$str = substr($str, 0, 7) . '...';
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) . '...';
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;
}
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).'…';
}
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;
}