Есть ли официальная функция PHP для этого? Что называется этим действием?
Нет, нет встроенной функции, но вы можете, конечно, создать свой собственный:
function str_truncate($str, $length) { if(strlen($str) <= $length) return $str; return substr($str, 0, $length - 3) . '...'; }
function truncateWords($input, $numwords, $padding="") { $output = strtok($input, " \n"); while(--$numwords > 0) $output .= " " . strtok(" \n"); if($output != $input) $output .= $padding; return $output; }
Усекать по слову
Нет, PHP не имеет встроенной функции для «усечения» строк (если у какого-то странного расширения нет такого, но не гарантировано, что у зрителей / у вас будет такой вид плагина – я не знаю ничего подобного) ,
Я бы рекомендовал просто написать для него простую функцию, например:
<?php function truncate($str, $len) { if(strlen($str) <= $len) return $str; $str = substr($str, 0, $len) . "..."; return $str; } ?>
И если вы хотите использовать символ «точка подвески» (один символ с тремя точками, это юникод), используйте объект HTML …
,
Я использую комбинацию wordwrap , substr и strpos, чтобы убедиться, что она не обрезает слова, или что разделителю не предшествует пробел.
function truncate($str, $length, $delimiter = '...') { $ww = wordwrap($str, $length, "\n"); return substr($ww, 0, strpos($ww, "\n")).$delimiter; } $str = 'The quick brown fox jumped over the lazy dog.'; echo truncate($str, 25); // outputs 'The quick brown fox...' // as opposed to 'The quick brown fox jumpe...' when using substr() only