@zchepygov

Возможно HTML текст разложить на теги, слова и пробелы?

Необходимо преобразовать в массив HTML верстку по такой форме:

<p>Какой-то текст. <strong>Возможно жирный.</strong></p>
<p>И не только один параграф, а очень много!!!</p>


Должно в итоге получиться следующие:

Array
(
    [0] => <p>
    [1] => Какой
    [2] => -
    [3] => то
    [4] => &nbsp; // пробел, но можно заменить на символ, который в дальнейшем будет обозначать пробел
    [5] => текст
    [6] => .
    [7] => &nbsp; // пробел, но можно заменить на символ, который в дальнейшем будет обозначать пробел
    [8] => <strong>
    [9] => Возможно
    [10] => &nbsp; // пробел, но можно заменить на символ, который в дальнейшем будет обозначать пробел
    [n] => ...
)


Есть вот такой вариант, но есть проблемы с закрывающими тегами </ они в коде идут как ошибка + появляются откуда-то пустые элементы массива (не пробелы, а именно пустые элементы внутри тегов).

preg_match_all("/([а-яА-ЯЁёa-zA-Z0-9]*|[.,-_!?;:'\(\)\"]*)/u", $content, $words);

Array
(
    [0] => 
    [1] => <
    [2] => p
    [3] => 
    [4] => >
    [5] => Какой
    [6] => 
    [7] => -
    [8] => то
    [9] => 
    [10] => текст
    [11] => 
    [12] => .
    [13] => 
    [14] => 
    [15] => <
    [16] => strong
    [17] => 
    [18] => >
    [19] => Возможно
    [20] => 
    [21] => жирный
    [22] => 
    [23] => . strong
    [25] => 
    [26] => > p
    [28] => 
    [29] => >
    [30] => 
    [31] => 
    [32] => 
    [33] => <
    [34] => p
    [35] => 
    [36] => >
    [37] => И
    [38] => 
    [39] => не
    [40] => 
    [41] => только
    [42] => 
    [43] => один
    [44] => 
    [45] => параграф
    [46] => 
    [47] => ,
    [48] => 
    [49] => а
    [50] => 
    [51] => очень
    [52] => 
    [53] => много
    [54] => 
    [55] => !!! p
    [57] => 
    [58] => >
    [59] => 
)
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
nokimaro
@nokimaro Куратор тега PHP
Самым корректным способом парсить HTML на PHP будет использование модулей DOM и XPath
https://www.php.net/manual/ru/class.domdocument.php
Либо обёртку над ними на подобии Simple HTML DOM.

Парсить HTML документ регулярками это плохая идея. Регулярки подходят только для совсем простых случаев, типа найти ссылку в документе и тд.
Ответ написан
DevMan
@DevMan Куратор тега PHP
элементарно: любой xml-парсер разложит вход на ноды.
остальное зависит только от вашей фантазии и способностей.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Karpion
Мне кажется - надо написать конечный автомат. Например, при появлении символа < - он переходит в состояние "внутри тэга", их которого он выйдет по символу >. Но внутри символа тэга - бывают строки (вход - по апострофу или кавычке; выход -= по такому же символу).

При определённых условиях - происходит завершение чтения определённого элемента (слова или тега) и переход к следующему.

Регулярка здесь не годится, ибо в каждом состоянии - свои ключевые элементы, по которым совершаются действия.

Кстати, у Вас не определено, что делать, если в тексте несколько пробелов.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
04 апр. 2020, в 23:07
30000 руб./за проект
04 апр. 2020, в 23:05
100000 руб./за проект
04 апр. 2020, в 22:57
2000 руб./за проект