Когда я использую substr ($ string, 0,100)
, он дает первые 100 символов. Иногда последнее слово оставалось неполным. Это выглядит странно. Можно ли ограничить словом, а не символом?
Если вы просто посчитаете слова, полученное жало все равно может быть очень длинным, поскольку одно «слово» может состоять из 30 или более символов. Я бы предложил вместо этого усечь текст до 100 символов, за исключением случаев, когда это приводит к усечению слова, вам также следует удалить усеченную часть слова. Это покрывается этим связанным вопросом:
Как усечь строку в PHP до слова, ближайшего к определенному количеству символов?
Использование переноса слов
$your_desired_width = 100;
if (strlen($string) > $your_desired_width)
{
$string = wordwrap($string, 100);
$i = strpos($string, "\n");
if ($i) {
$string = substr($string, 0, $i);
}
}
Это измененная версия ответа здесь . если вводимый текст может быть очень длинным, вы можете добавить эту строку перед вызовом переноса слов, чтобы при переносе слов не приходилось анализировать весь текст:
$string = substr($string, 0, 101);
Использование регулярного выражения (Источник)
$string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, 100));
Я бы сделал что-то вроде:
<?php
function cut_text($text, $len)
{
for ($i = 0; $i < 10; ++$i)
{
$c = $text[$len + $i];
if ($c == ' ' || $c == "\t" || $c == "\r" || $c == "\n" || $c == '-')
break;
}
if ($i == 10) $i = 0;
return rtrim(substr($text, 0, $len + $i));
}
echo cut_text("Hello, World!", 3)."\n";
?>
Просто начните с некоторой точки ($ len) и продвиньтесь вперед на определенное количество символов ($ i) в поисках разрывающего символа (например, , пробел). Вы также можете смотреть назад (- $ i) или в обоих направлениях, в зависимости от того, что вы ищете.
$a = explode('|', wordwrap($string, 100, '|');
print $a[0];