Как перехватить полные слова, используя substr () в PHP, ограничение по слову?

Когда я использую substr ($ string, 0,100) , он дает первые 100 символов. Иногда последнее слово оставалось неполным. Это выглядит странно. Можно ли ограничить словом, а не символом?

9
задан Gert Grenander 21 August 2010 в 16:08
поделиться

3 ответа

Если вы просто посчитаете слова, полученное жало все равно может быть очень длинным, поскольку одно «слово» может состоять из 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));
17
ответ дан 4 December 2019 в 10:02
поделиться

Я бы сделал что-то вроде:

<?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) или в обоих направлениях, в зависимости от того, что вы ищете.

0
ответ дан 4 December 2019 в 10:02
поделиться
$a = explode('|', wordwrap($string, 100, '|');
print $a[0];
3
ответ дан 4 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: