У меня произвольный текст HTML, и мне нужно обработать его в PHP, чтобы удалить все теги, кроме нескольких "хорошо известных"(<h1> <h2> <h3> <h4> <ul> <ol> <li> <p> < br> <a> <b> <u> <i> <sup> <sub> <table> <th> <tr> <td> <blockquote> и их закрывающие теги) и все атрибуты, кроме атрибута href для <a > и вернуть любой оставшийся HTML в виде строки. Мне также нужно вручную удалить любые ссылки, кроме "(https?|ftp)://.*"
, но это будет единственная оставшаяся работа с регулярными выражениями.
Мне не нужно проверять общую валидность HTML, соответствие открывающих / закрывающих тегов и т.д., HTML должен быть заслуживающим доверия, и в первую очередь он должен удалять нежелательные теги и атрибуты, не оставляя ничего, кроме простого текста и нескольких самых основных элементов.
Я начал с использования strstr(), чтобы получить тело HTML, затем strip_tags(), чтобы удалить все, кроме заданных тегов, затем regex, чтобы удалить все атрибуты, кроме HREF, и, наконец, преобразовать все оставшиеся <в & lt; (кроме как в известных тегах) в качестве заключительного раунда входной санитарии. Но один комментарий предложил использовать DOMDocument и DOMXPath, а не regex, для любой обработки HTML.
Кажется хорошей идеей использовать правильные инструменты, но я не могу понять, как их использовать. Как я могу использовать их, чтобы удалить все, кроме этих конкретных элементов, а также удалить все атрибуты из всех элементов, кроме href
in, из моей строки HTML?
Обновление: это предложенный патч для существующего стороннего проекта, и я не могу импортировать такие пакеты, как HTML Purifier, если их еще нет. У меня есть PHP DOM и несколько других расширений PHP, но стандартная обработка PHP + XML + DOM, кажется, является инструментарием, который у меня есть для этого.