Как получить часть большого текста, не теряя HTML-теги с PHP? - PullRequest
0 голосов
/ 30 декабря 2018

Я получаю большой контент из API, что-то вроде этого:

Lorem <div class="highlighted">ipsum dolor</div> 
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit 
esse cillum dolore eu fugiat nulla pariatur

Я хочу показать около 10 слов из этого контента.А также я не хочу пропустить часть <div class="highlighted">ipsum dolor</div>.Я имею в виду div и class="highlighted" не должны быть удалены.

Я попробовал эту функцию:

 function getPartialContent($content, $words_number)
    {
        $no_tags_content = preg_replace("/\r|\n/", "", html_entity_decode(filter_var($content, FILTER_SANITIZE_STRING)));

        $words = explode(" ", $no_tags_content);
        $result = implode(" ", array_splice($words, 0, $words_number));
        return $result;
    }

Единственная проблема состоит в том, что эта функция сначала удаляет все html-теги.Если я не использую preg_replace для удаления тегов html, результат будет примерно таким (div не закрыт):

Lorem sed do eiusmod tempor incididunt is that this <div class="highlighted">ipsum

, что не то, что я хочу.

Я ожидаю, что результат будет с закрытыми тегами или вообще без тегов.Обычно в div есть одно или два слова.Количество слов в результате не так важно.Я просто хочу, чтобы оно было коротким, примерно от 10 до 15 слов.

1 Ответ

0 голосов
/ 31 декабря 2018

Вы можете попробовать что-то вроде этого:

$rgxp = '/^(\W*(<[^>]+>\W*)?\w+(\W*<[^>]+>)?\W*){10,15}/';
preg_match($rgxp, $text, $mtch);
echo "\n",$mtch[0], "\n";

Расширенный:

$rgxp = '/
^             # start of line
(             # group to quantify
\W*           # ignore space & punctuation
(<[^>]+>\W*)? # optional opening tag group
\w+           # the words to count
(\W*<[^>]+>)? # optional closing tag group
\W*           # ignore space & punctuation
) {10,15}     # quantifier
/x';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...