Мне нужна функция PHP, которая будет подсчитывать количество символов фразы. Если фраза длиннее символа «140», тогда эта функция должна удалить все остальные символы и добавить три точки в конце фразы. Так, например, у нас есть.
$message= "I am what I am and you are what you are etc etc etc etc"
ЕСЛИ это длиннее 140 символов, тогда
$message= "I am what I am and you are what you are..."
Это возможно? Как? спасибо
if(strlen($str) > 140){ $str = substr($str, 0, 140).'...'; }
Если вы хотите быть «чувствительным к словам» (т. wordwrap()
Не сломать середину слова), вы можете использовать wordwrap()
.
Этот вариант будет корректно работать с необходимой кодировкой (например, utf-8) и будет пытаться разрезать пробел, чтобы не сломать слова:
$charset = 'utf-8'; $len = iconv_strlen($str, $charset); $max_len = 140; $max_cut_len = 10; if ($len > $max_len) { $str = iconv_substr($str, 0, $max_len, $charset); $prev_space_pos = iconv_strrpos($str, ' ', $charset); if (($max_len-$prev_space_pos) < $max_cut_len) $str = iconv_substr($str, 0, $prev_space_pos, $charset); $str .= '...'; }
Это было бы:
/** * trim up to 140 characters * @param string $str the string to shorten * @param int $length (optional) the max string length to return * @return string the shortened string */ function shorten($str, $length = 140) { if (strlen($str) > $length) { return substr($str, 0, $length).'...'; } return $str; } /** * trim till last space before 140 characters * @param string $str the string to shorten * @param int $length (optional) the max string length to return * @return string the shortened string */ function smartShorten($str, $length = 140) { if (strlen($str) > $length) { if (false === ($pos = strrpos($str, ' ', $length))) { // no space found; cut till $length return substr($str, 0, $length).'...'; } return substr($str, 0, strrpos($str, ' ', $length)).'...'; } return $str; }
Это функция, которую я часто использую
function shorten($str,$l = 30){ return (strlen($str) > $l)? substr($str,0,$l)."...": $str; }
вы можете изменить длину по умолчанию на все, что хотите