Задать вопрос
@Vadik7777

Как с помощью Crawler вставить текст с html тегами в файл на Laravel?

Пытаюсь вставить текст с html тегами в блок на странице:
$content = File::get($path_to_file);
$crawler = new Crawler($content);
$elem = $crawler->filter('#main_text');
        if ($elem->count() > 0) {
            $dom = $elem->getNode(0);
            $dom->nodeValue = 'Мой <br> текст: <span>ТЕСТ</span>?';
        }
File::put($path_to_file2, $crawler->html());


В итоге, текст в нужном блоке странице изменился, но при открытии страницы в блоке текст отображается с HTML тэгами, то есть они не применены на странице (<br>).
Как можно сделать, чтобы HTML теги сохранялись в найденных элементах?

UPDATE:
Добавление HTML тегов получилось сделать так:
$content = File::get($path_to_file);
$crawler = new Crawler($content);
$elem = $crawler->filter('#main_text');
        if ($elem->count() > 0) {
            $newHtml = 'Мой <br> текст: <span>ТЕСТ</span>?';
            $newCrawler = new Crawler($newHtml);

            $elem->getNode(0)->nodeValue = '';
            foreach ($newCrawler as $node) {
                $importedNode = $elem->getNode(0)->ownerDocument->importNode($node, true);
                $elem->getNode(0)->appendChild($importedNode);
            }
        }
File::put($path_to_file2, $crawler->html());

Но теперь появилась другая проблема, при добавлении нового текста в блок по ID, добавляется в начале текста и в конце теги:
<p>Мой <br> текст: <span>ТЕСТ</span>?</p>
  • Вопрос задан
  • 119 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Vadik7777 Автор вопроса
РЕШЕНИЕ:
$content = File::get($path_to_file);
$crawler = new Crawler($content);
$elem = $crawler->filter('#main_text');
        if ($elem->count() > 0) {
            $newHtml = 'Мой <br> текст: <span>ТЕСТ</span>?';
            $blockHtml = $elem->html();
            $updatedHtml = str_replace($blockHtml, $newHtml, $crawler->html());
            $crawler = new Crawler($updatedHtml);
        }
File::put($path_to_file2, $crawler->html()); //html_entity_decode

P.S.
Простой замены содержимого с элементами HTML тегов методами Crawler нету, ну либо я не нашел.
...
Прикольно, что даже бывалые в этой теме глухи, а значит они тоже не знают, ахахахаха
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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