Как вы обрезаете текст после определенного количества символов в PHP? - PullRequest
18 голосов
/ 07 августа 2009

У меня есть две строки, которые я хочу ограничить, скажем, первые 25 символов, например. Есть ли способ обрезать текст после 25-го символа и добавить ... в конец строки?

Итак, 12345678901234567890abcdefg превратится в «12345678901234567890abcde ...», где «fg» обрезается.

Ответы [ 11 ]

44 голосов
/ 07 августа 2009

Могу ли я внести изменения в код Паллана?

$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;

Это не добавляет '...', если оно короче.

10 голосов
/ 07 августа 2009

Чтобы избежать обрезки прямо в середине слова, вы можете попробовать функцию wordwrap; что-то вроде этого, я полагаю, может сделать:

$str = "this is a long string that should be cut in the middle of the first 'that'";
$wrapped = wordwrap($str, 25);
var_dump($wrapped);

$lines = explode("\n", $wrapped);
var_dump($lines);

$new_str = $lines[0] . '...';
var_dump($new_str);

$wrapped будет содержать:

string 'this is a long string
that should be cut in the
middle of the first
'that'' (length=74)

Массив $lines будет выглядеть так:

array
  0 => string 'this is a long string' (length=21)
  1 => string 'that should be cut in the' (length=25)
  2 => string 'middle of the first' (length=19)
  3 => string ''that'' (length=6)

И, наконец, ваш $new_string:

string 'this is a long string' (length=21)


С подстроном, вот так:

var_dump(substr($str, 0, 25) . '...');

Вы бы получили:

string 'this is a long string tha...' (length=28)

Что выглядит не так красиво: - (


Тем не менее, получайте удовольствие!

8 голосов
/ 07 августа 2009

Действительно быстро,

$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'
6 голосов
/ 17 июля 2015

Это короткое слово с учетом границы слова, оно не использует циклы, что делает его очень эффективным

function truncate($str, $chars, $end = '...') {
    if (strlen($str) <= $chars) return $str;
    $new = substr($str, 0, $chars + 1);
    return substr($new, 0, strrpos($new, ' ')) . $end;
}

Использование:

truncate('My string', 5); //returns: My...
4 голосов
/ 14 января 2017

http://php.net/manual/en/function.mb-strimwidth.php (PHP 4> = 4.0.6, PHP 5, PHP 7)

<?php
echo mb_strimwidth("Hello World", 0, 10, "...");
echo "<br />";
echo mb_strimwidth("Hello", 0, 10, "...");
?>

выход:

Hello W...
Hello
2 голосов
/ 29 декабря 2010
$words=explode(' ', $string);
for($ii = 0,$j=0; $ii< 5 && $j < sizeof($words) ;$j++){
    $ii += strlen($words[$j]);
    $intro= $words[$j]. " ";    
}
$intro.= "...";

Я знаю, что уже поздно, но если кто-то еще вернется на эту страницу, это подойдет,

1 голос
/ 14 февраля 2012

Я бы пошел с ответом Паскаля МАРТИНА, с некоторыми дополнительными улучшениями. Поскольку;

1 - "PHP wordwrap", автоматически учитывает границы слов

2 - Если ваша строка содержит слово больше чем 25 символов (ага, так что ничего не поделаешь), вы можете заставить "PHP wordwrap" разрезать слово. (Улучшение)

3 - Если ваша строка короче 25 символов, после полного предложения "..." будет выглядеть некрасиво (улучшение)

$str = "This string might be longer than 25 chars, or might not!";
// we are forcing to cut long words...
$wrapped = wordwrap($str, 25, "\n", 1);
var_dump($wrapped);

$lines = explode("\n", $wrapped);
var_dump($lines);

// if our $str is shorter than 25, there will be no $lines[1]
(array_key_exists('1', $lines)) ? $suffix = '...' : $suffix = '';
$new_str = $lines[0] . $suffix;
var_dump($new_str);
1 голос
/ 07 августа 2009

Вы ищете метод substr .

$s = substr($input, 0, 25);

Это даст вам первый кусок строки, а затем вы можете добавить все, что вы хотите в конце.

1 голос
/ 07 августа 2009

substr функция подходит именно вам

0 голосов
/ 07 августа 2009
 echo substr($str,0,25)."...";

Сработает, но если вы имеете дело со словами, возможно, вы захотите обрезать границы слов, чтобы у вас не было частичного слова: «Быстрый бл ...

Итак, чтобы сделать это (грубо с моей головы):

$words = split(" ", strlen($str));

for($i = 0,$j=0; $i< 25 && $j < sizeof($words) ;$j++)
{
    $i += strlen($words[$j]);
    echo $words[$j]. " ";    
}
echo "...";
...