Обрезать текст в PHP?

Я пытаюсь обрезать некоторый текст в PHP и наткнулся на этот метод (http://theodin.co.uk/blog/development/truncate-text-in-php-the-easy-way.html), что, судя по комментариям, кажется очень простым - реализовать решение. Проблема в том, что я не знаю, как это реализовать: S.

Не мог бы кто-нибудь указать мне, что делать, чтобы реализовать это? Любая помощь будет оценена по достоинству.

Заранее спасибо.


person realph    schedule 09.02.2012    source источник
comment
Что вы не понимаете в substr()? Где вы путаетесь? Это одна функция, которая возвращает часть исходной строки на основе заданных вами параметров.   -  person Brad    schedule 10.02.2012
comment
Да, просто используйте substr() первый параметр - это ваш текст, второй - смещение - если установлено значение 0, оно будет обрезано с начала, если установлено значение 1,2,3... оно будет обрезано после этого количества символов, третий аргумент это длина, которая должна быть усечена. Например, substr("hello world", 3, 4) вернет lo w — 4 символа после 3.   -  person Tony Bogdanov    schedule 10.02.2012
comment
возможный дубликат обрезать многобайтовую строку до n символов   -  person Gordon    schedule 10.02.2012
comment
Закрыт как не настоящий вопрос? Автор хочет знать, как обрезать текст в PHP. В наше время кучка обезьян диктует вопрос?   -  person Lindsay    schedule 15.09.2014


Ответы (2)


Очевидно, что нужно прочитать документацию.

Но чтобы помочь: substr($str, $start, $end);

$str это ваш текст

$start — это индекс символа, с которого нужно начинать. В вашем случае, скорее всего, 0, что означает самое начало.

$end - это место, где нужно обрезать. Предположим, вы хотите, например, закончить на 15 символах. Вы бы написали так:

<?php

$text = "long text that should be truncated";
echo substr($text, 0, 15);

?>

и вы получите это:

long text that 

имеет смысл?

ИЗМЕНИТЬ

Ссылка, которую вы дали, представляет собой функцию поиска последнего пробела после обрезки текста до нужной длины, чтобы вы не обрезали в середине слова. Однако в нем отсутствует одна важная вещь - желаемая длина, которая должна быть передана функции, вместо того, чтобы всегда предполагать, что вы хотите, чтобы она составляла 25 символов. Итак, обновленная версия:

function truncate($text, $chars = 25) {
    if (strlen($text) <= $chars) {
        return $text;
    }
    $text = $text." ";
    $text = substr($text,0,$chars);
    $text = substr($text,0,strrpos($text,' '));
    $text = $text."...";
    return $text;
}

Итак, в вашем случае вы должны вставить эту функцию в файл functions.php и вызвать ее на своей странице следующим образом:

$post = the_post();
echo truncate($post, 100);

Это сократит ваше сообщение до последнего появления пробела до или равного 100 символам. Очевидно, вы можете передать любое число вместо 100. Все, что вам нужно.

person Kai Qing    schedule 09.02.2012
comment
определенно. Почти положительно действительно плохой. - person Kai Qing; 10.02.2012
comment
Спасибо за помощь, пытаюсь разобраться. Заранее извиняюсь, если покажусь глупым. Могу ли я поместить эту строку с веб-сайта, на который я ссылаюсь, во что-то вроде файла functions.php (я использую WordPress)? Я имею в виду, где я могу объявить эту функцию? - person realph; 10.02.2012
comment
substr — это собственная функция php, поэтому вы можете вызывать ее на лету в любом месте. Нет необходимости писать функцию, которая возвращает то же самое, если только вы по какой-то причине не расширяете ее. Похоже, это не так. wordpress, например, позволяет делать такие вещи: $post = the_post(); где вы определяете содержимое поста как переменную. Вы можете подставить это и посмотреть, как он отреагирует. эхо-подстрока($post, 0, 100); и посмотрите, возвращает ли он первые 100 символов вашего сообщения. Если это не то, что вы имеете в виду, вы можете отредактировать свой вопрос, чтобы уточнить конкретную ситуацию. - person Kai Qing; 10.02.2012
comment
Извините, я совершенно упустил суть. Спасибо за это! Кажется, это работает. Помимо того, что он явно короче, чем этот метод отличается от ссылки, которую я разместил? - person realph; 10.02.2012
comment
Ах, попался! Это было бы прекрасно! Сейчас я пытаюсь решить, как закончить это с .... Я попытаюсь решить это сам и опубликую свои результаты здесь. Еще раз спасибо. - person realph; 10.02.2012
comment
Я обновил свой ответ, чтобы объяснить. - person Kai Qing; 10.02.2012
comment
Огромное спасибо за обновление. Будет ли это более рациональным способом сделать это? Поскольку в PHP передается 100, какой смысл использовать число 25 в функциях? - person realph; 10.02.2012
comment
давайте продолжим это обсуждение в чате - person realph; 10.02.2012
comment
Функция mb_strimwidth в php делает то же самое с одной встроенной функцией: mb_strimwidth($string, 0, 15, "...") - person tolginho; 29.05.2016
comment
Я бы добавил if (strlen($text) › $chars) { ... } в функцию, чтобы убедиться, что если длина строки меньше требуемых символов, вы не добавляете эллипс. - person Christopher Smit; 03.11.2017
comment
@ChristopherSmit - да, есть много способов улучшить это. Это в основном просто стартовая функция. Подумайте, что произойдет, если в строке есть какой-либо html. вы удаляете теги или пишете интеллектуальный синтаксический анализатор для логического разделения и закрытия незакрытых тегов? - person Kai Qing; 03.11.2017

$text="abc1234567890";

// truncate to 4 chars

echo substr(str_pad($text,4),0,4);

Это позволяет избежать проблемы усечения строки из 4 символов до 10 символов.. (т.е. источник меньше требуемого)

person FreudianSlip    schedule 09.02.2012