Ответ 1
Могу ли я внести изменения в код pallan?
$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;
Это не добавляет "...", если оно короче.
У меня есть две строки, которые я хочу ограничить, чтобы сказать, например, первые 25 символов. Есть ли способ отрезать текст после 25-го символа и добавить... в конец строки?
Итак '12345678901234567890abcdefg' превратится в "12345678901234567890abcde...", где "fg" отключен.
Могу ли я внести изменения в код pallan?
$truncated = (strlen($string) > 20) ? substr($string, 0, 20) . '...' : $string;
Это не добавляет "...", если оно короче.
Чтобы избежать резки прямо в середине слова, вы можете попробовать 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)
Что не выглядит так приятно: - (
Тем не менее, получайте удовольствие!
Действительно быстро,
$truncated = substr('12345678901234567890abcdefg', 0, 20) . '...'
Этот короткий и учитывает границу слова, он не использует циклы, что делает его очень эффективным
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
$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) . '...' ?>
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 "...";