Я потратил Stackoverflow на возможный ответ в течение нескольких часов, и хотя я нашел несколько решений, ни одно из них не сработало в моем случае.
Мне нужно получить текст div и выполнить его через foreach
цикл, чтобы в конечном итоге создать новую запись базы данных для каждого содержимого div.
Все работает, пока я не сталкиваюсь с div с многострочным контентом и <br>
тегами.
Я пробовал:
$quotes = $finder->query("//*[contains(@class, normalize-space('$quote'))]//text()");
Но это не похоже на normalize-space()
имеет какой-либо эффект, потому что вместо того, чтобы помещать весь текст в один массив, вместо каждого <br>
создается новый массив.
Больше кода:
$quotes = $finder->query("//*[contains(@class, normalize-space('$quote'))]//text()");
$authors = $finder->query("//*[starts-with(@class,'$author')]/child::a");
foreach ($quotes as $key => $quote) {
{
$quote = trim($quote->textContent);
$dataArr[] = $quote;
$authorName = preg_split("/[\s,-,@]+/", $authors[$key]->textContent);
if (count($authorName) < 5) {
$authorName = $authorName[1];
} else if (count($authorName) > 5) {
$authorName = $authorName[1] . ' ' . $authorName[2] . ' ' . $authorName[3];
} else if (count($authorName) > 6) {
$authorName = $authorName[1] . ' ' . $authorName[2] . ' ' . $authorName[3] . ' ' . $authorName[4];
} else {
$authorName = $authorName[1] . ' ' . $authorName[2];
}
array_push($dataArr, $authorName);
}
Структура HTML, которая извлекаетсяправильно:
<div class="b-list-quote2__item "><a href="/" class="b-list-quote2__item-text js-quote-text">
A random quote here...
</a><div class="b-list-quote2__item-category">
<a href="/quotes/albert-einshtein?q=17856">Albert Einstein</a>
В этом случае я получаю массив с цитатой и автором, который позже делю на 2 и использую в других функциях
[0] => A random quote here...
[1] => Albert Einstein
Структура HTML У меня проблема с:
<div class="b-list-quote2__item "><a href="/" class="b-list-quote2__item-text js-quote-text" style="position: relative; max-height: none;">
Quote line 0,
<br>Quote line 1,
<br>Quote line 2,
<br>Quote line 3,
</a><div class="b-list-quote2__item-category">
<a href="/quotes/karmelita-kruglaia?q=249176">Tesla</a>
В этом случае для каждой строки текста добавляется новый элемент массива, что-то вроде
[0] => Quote line 0
[1] => Quote line 1
[2] => Quote line 2
[3] => Quote line 3
Без «автора» в массиве, который в данном случае должен быть «Тесла».
Как должен выглядеть хороший массив:
[0] => Quote line 0 Quote line 1 Quote line 2 Quote line 3
[1] => Tesla