Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 05.06.2020 09:10:26

Парсинг html

Добрый день.
Версия Laravel: 7.14.1

Задача.
Необходимо текст HTML из поля формы сохранить в БД в виде json строки.
Пример html:

<h2>Это заголовок</h2>
<p>Это первый параграф</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<blockquote>
<p>это цитата</p>
</blockquote>
<p>Это второй параграф</p>
<hr>
<p>Это третий параграф</p>
<p>&nbsp;</p>
<pre>
<code class="language-plaintext">
Какой-то ещё тег
</code>
</pre>
<p>&nbsp;</p>

Что должно получиться:

[
 {
   type:h2
   value:Это заголовок
 },

 {
   type:p
   value:Это первый параграф
 },

 {
   type:p
   value:&nbsp;
 },
 {
   type:p
   value:&nbsp;
 },
 {
   type:p
   value:&nbsp;
 },

 {
   type:blockquote
    {
      type:p
      value:это цитата;
    },
 },

 {
   type:p
   value:Это второй параграф;
 },

 {
   type:hr
 },

 {
   type:p
   value:Это третий параграф
 },

 {
   type:p
   value:&nbsp;
 },


 {
   type:pre
    {
      type:code
      value:Какой-то ещё тега;
    },
 },

 {
   type:pre
    {
      type:code
      value:Какой-то ещё тега;
    },
 },
 {
   type:p
   value:&nbsp;
 }

]

Структура html всегда разная. Структура json должна повторять структуру html.


Я вижу следующие этапы решения данной задачи:
1 HTML код преобразовать в PHP массив, где название тега - ключ, а содержимое - значение
2 Полученный массив преобразовать в json

Со 2-м пунктом проблем не должно возникнуть. Сейчас застопорился с 1-м пунктом.

Что было проделано:
Пересмотрел в гугле все возможный парсеры html, но все они заточены на поиске конкретного тега или атрибута. В данной задаче мне необходимо распарсить все теги и разместить их  в том порядке, в котором они расположены в HTML.

Буду рад любым вариантам, неважно будь-то пакет laravel либо "ванильный" php.
Заранее спасибо.

Не в сети

#2 29.07.2020 16:40:45

Re: Парсинг html

Можно попробовать через DomCrawler брать html и в цикле проходясь по нодам сохранять в нужный формат
https://symfony.com/doc/current/compone … awler.html

Не в сети

Подвал раздела