Как отрезать текст после определенного количества символов в PHP?

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

So '12345678901234567890abcdefg' превратится в ' 12345678901234567890abcde...- где " ФГ " отрезано.

11 ответов


могу ли я внести изменения в код pallan это?

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

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


чтобы избежать резки прямо в середине слова, вы можете попробовать wordwrap


очень быстро,

$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'

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

этот короткий и учитывает границу слова

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...

$words=explode(' ', $string);
for($ii = 0,$j=0; $ii< 5 && $j < sizeof($words) ;$j++){
    $ii += strlen($words[$j]);
    $intro= $words[$j]. " ";    
}
$intro.= "...";

Я знаю его до конца, но если кто-нибудь еще вернется на эту страницу, это


substr функция является правильным для вас


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

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

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


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

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

2-Если ваша строка содержит слово более 25 символов (aagh, поэтому делать нечего), вы можете заставить "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);

<?php echo substr('12345678901234567890abcdefg', 0, 20) . '...' ?>

http://fr.php.net/manual/en/function.substr.php


 echo substr($str,0,25)."...";

сделал бы трюк, но если вы имеете дело со словами, вы можете отключить границы слов, чтобы у вас не было частичного слова doig это: быстрый bl...

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

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

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