Я реализовал алгоритм для этой компании, в которой я работаю. Работает просто отлично. НО, это было довольно сложно реализовать.
Я бы определенно проверил HTMLPurifier, чтобы увидеть, насколько легко это работает для вас. Если вы настаиваете на том, чтобы делать это по-старому, как я, это основные шаги:
1.
Сначала ==> подружитесь с stripos()
2.
Вы должны сделать рекурсивную функцию для определения начального и конечного тегов для виджета, которая включает все комбинации <embed></embed>
или <embed/>
(самозакрытие) или <object></object>
... или <object><params>...<embed/></object>
3.
После этого вам нужно разобрать все атрибуты и параметры.
4.
Теперь все теги <object>
должны иметь теги <param>
в качестве дочерних элементов. Вы должны проанализировать все это, чтобы получить все данные, необходимые для окончательной генерации нового встраивания или тега объекта. Особенно важны параметры и атрибуты, которые имеют значение, высота, источник данных.
5.
Теперь вы не знаете, заключены ли атрибуты в одинарные или двойные кавычки, поэтому ваш код должен быть снисходительным. Кроме того, вы не знаете, если код действителен или правильно сформирован. Таким образом, он должен иметь возможность обрабатывать вложенные теги embed / object, теги embed, которые неправильно вложены, и т. Д. И т. Д. Поскольку пользователь генерирует контент, вы не можете знать и доверять вводу. Вы увидите, что комбинаций много.
6.
Если вам удастся проанализировать внедренный элемент со всеми его атрибутами (или элементом объекта и его дочерними параметрами), создание белого списка доменов будет простым ...
Мой код в итоге составил около 800 строк кода, что довольно много, и он был заполнен рекурсивными методами, находил правильные метки остановки и окончания и т. Д. Мой алгоритм также удалил весь SEO-текст, который часто включается в встроенный код вырезания и вставки, например ссылки на сайт, содержащий виджет.
Это хороший тренинг, но если я там, где ты ... Не начинай идти по этой дороге.
Рекомендация: попробуйте найти что-то готовое, с открытым исходным кодом!