Обрезать заголовок до ближайшего слова - PullRequest
6 голосов
/ 15 декабря 2010

Скажите, например, у меня есть следующий код:

<h3>My very long title</h3>
<h3>Another long title</h3>

Если я хочу сократить эти заголовки с помощью PHP или jQuery, как мне обрезать их до ближайшего слова и добавить многоточие? Можно ли указать количество символов?

<h3>My very long...</h3>
<h3>Another long...</h3>

Редактировать - Как я могу сделать это для каждого из заголовков? У меня нет идеи, как передать каждый заголовок в строку ...

Спасибо

Ответы [ 6 ]

9 голосов
/ 15 декабря 2010

Это легко, используя функцию 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);

(я не проверял это, но оно должно работать отлично.)

5 голосов
/ 15 декабря 2010

Создание многоточия в PHP

<?php
function ellipsis($text, $max=100, $append='&hellip;')
{
    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

1 голос
/ 15 декабря 2010

Если вы хотите быть в пределах определенной длины, это будет работать.

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

Проверено, отлично работает.

Редактировать: превращено в функцию.

1 голос
/ 15 декабря 2010

Возможно, вы ищете wordwrap () .

string wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]] )

Используйте $ break, чтобы разбить строку, используя необязательный параметр break.Если для среза установлено значение ИСТИНА, строка всегда переносится с указанной шириной или перед ней.Так что, если у вас есть слово, которое больше заданной ширины, оно разбито на части.

Дополнительные примеры можно найти в документации по функции на сайте php.

+++

Другим решением было бы разделить заголовок на ' ' (пробел), используя explode () , и предоставить ограничение, чтобы сказать максимум 5 слов, чем отрезать последний элемент массива с помощью array_pop и, наконец, соединить ихс implode () , используя ' ' (это пространство) в качестве клея.Но это решение не самое лучшее, так как оно даст вам ужасный результат, если у вас длинные слова.

1 голос
/ 15 декабря 2010

См. вопрос :

function wrap($string, $limit) {
  $wstring = explode("\n", wordwrap($string, $limit, "\n") );
  return $wstring[0] . '...';
}

Редактировать: (включая <= проверку лимита $) </p>

<?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>
0 голосов
/ 15 декабря 2010

с использованием некоторых php и мощных регулярных выражений

function formatHeadline($headline){
    if(preg_match('/(\w+\s+){3}/', $subject, $match)){
        return $match[1]  . '...';
    }
    return $headline;
}

Тот же метод должен быть возможен в javascript с использованием regex и jquery.

Jquery также имеет многоточие плагин, вы можете посмотреть на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...