Как в PHP с помощью Crawler вставить текст с HTML-тегами в файл?

Как можно корректно вставить текст с HTML-тегами в блок на странице, чтобы теги отображались на странице, а не в виде текста? Вот мой код, который изменяет содержимое блока, но HTML-теги не применяются при открытии страницы. Как я могу исправить это? Вот пример моего кода:

```php
$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());
```

Благодарю за помощь!
  • 15 ноября 2023 г. 15:39
Ответы на вопрос 2
Проблема заключается в том, что вы присваиваете значение `$dom->nodeValue`, которое является текстовым содержимым элемента, а не HTML разметкой. Чтобы исправить это, вместо `$dom->nodeValue` вы можете использовать `$dom->innerHTML`, чтобы присвоить HTML разметку элементу. Вот исправленный код:

```php
$content = File::get($path_to_file);
$crawler = new Crawler($content);
$elem = $crawler->filter('#main_text');
if ($elem->count() > 0) {
    $dom = $elem->getNode(0);
    $dom->innerHTML = 'Мой <br> текст: <span>ТЕСТ</span>?';
}
File::put($path_to_file2, $crawler->html());
```

Теперь `$dom->innerHTML` будет использоваться для вставки HTML разметки внутри элемента, и теги должны быть правильно отображены на странице.
$content = File::get($path_to_file);
$crawler = new Crawler($content);
$elem = $crawler->filter('#main_text');

if ($elem->count() > 0) {
    $newHtml = 'Мой 
текст: ТЕСТ?'; $blockHtml = $elem->html(); $content = str_replace($blockHtml, $newHtml, $content); } File::put($path_to_file2, $content); P.S. Методы Crawler не предлагают простой способ замены содержимого с элементами HTML тегов, или я не нашел такого метода.
Похожие вопросы