Скажем, например, у меня есть следующий код:
<h3>My very long title</h3> <h3>Another long title</h3>
Если бы я хотел сократить эти заголовки с помощью PHP или jQuery, как можно обрезать их до ближайшего слова и добавить многоточие? Можно ли указать количество символов?
<h3>My very long...</h3> <h3>Another long...</h3>
Изменить. Как я могу сделать это для каждого из заголовков? У меня действительно нет идеи, как передать каждый заголовок в строку …
благодаря
Создание многоточия в PHP
<?php function ellipsis($text, $max=100, $append='…') { if (strlen($text) <= $max) return $text; $out = substr($text,0,$max); if (strpos($text,' ') === FALSE) return $out.$append; return preg_replace('/\w+$/','',$out).$append; } ?>
Затем эту функцию можно использовать следующим образом:
<?php $text = "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo."; echo ellipsis($text,100); ?>
jQuery Auto Ellipsis
Это легко использовать с помощью функции PHP. Посмотрите на этот пример:
function trim_text($input, $length) { // If the text is already shorter than the max length, then just return unedited text. if (strlen($input) <= $length) { return $input; } // Find the last space (between words we're assuming) after the max length. $last_space = strrpos(substr($input, 0, $length), ' '); // Trim $trimmed_text = substr($input, 0, $last_space); // Add ellipsis. $trimmed_text .= '...'; return $trimmed_text; }
Затем вы можете передать текст с помощью функции типа:
trim_text («Мое длинное название», 10);
(Я не тестировал это, но он должен работать отлично.)
Возможно, вы ищете wordwrap () .
string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] )
Используйте $ break, чтобы разбить строку, используя необязательный параметр break. Если для разреза установлено значение ИСТИНА, строка всегда будет обернута до или до указанной ширины. Поэтому, если у вас есть слово, которое больше заданной ширины, оно разбивается.
Дополнительную информацию можно найти в документации по функциям на сайте php.
+++
Другим решением было бы разделить заголовок на ' '
(пробел) с помощью метода explode () и предоставить ограничение на максимальное 5 слов, чем отрезать последний элемент массива с помощью array_pop и, наконец, объединить их с implode (), используя ' '
( это пространство) в качестве клея. Но это решение не самое лучшее, так как это даст вам уродливый результат, если у вас длинные слова.
Если вы хотите быть в определенной длине, это будет работать.
function truncateString($string, $length, $append = '...') { $length -= strlen($append); // length of "..." $string = substr($string, 0, $length); $string = substr($string, 0, strrpos($string, ' ')); $string .= $append; return $string; } echo truncateString('My very long title', 15);
Протестировано, отлично работает.
Изменить: превращено в функцию.
См. Этот вопрос :
function wrap($string, $limit) { $wstring = explode("\n", wordwrap($string, $limit, "\n") ); return $wstring[0] . '...'; }
Изменить: (в том числе <= $ limit check)
<?php function wrap($string, $limit) { if (strlen($string) <= $limit) { return $string; } $wstring = explode("\n", wordwrap($string, $limit, "\n")); return $wstring[0] . '...'; } ?> <h3><?php echo wrap('My very long title', 12); ?></h3>
используя некоторые php и могучие регулярные выражения
function formatHeadline($headline){ if(preg_match('/(\w+\s+){3}/', $subject, $match)){ return $match[1] . '...'; } return $headline; }
Тот же метод должен быть возможен в javascript с использованием regex и jquery.
JQuery также имеет плагин с многоточием , возможно, вы захотите изучить его.