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

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

Итак, «12345678901234567890abcdefg» превратится в «12345678901234567890abcde …», где «fg» отключен.

Solutions Collecting From Web of "Как отрезать текст после определенного количества символов в PHP?"

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

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

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

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

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

Чтобы избежать резки прямо в середине слова, вы можете попробовать функцию 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) 

С помощью substr, например:

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

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

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

Что не выглядит так приятно 🙁

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

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

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

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

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

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 

Функция 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: Quick bl …

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

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