Laravel:

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

Ci:

function word_limiter($str, $limit = 100, $end_char = "…")
{
  if (trim($str) === "")
  {
    return $str;
  }

  preg_match("/^s*+(?:S++s*+){1,".(int) $limit."}/", $str, $matches);

  if (strlen($str) === strlen($matches[0]))
  {
    $end_char = "";
  }

  return rtrim($matches[0]).$end_char;
}