preg_replace для удаления пустых тегов, но сохранения конца кавычек блоков
-
19-09-2019 - |
Вопрос
Я создал это выражение, чтобы удалить все пустые (включая теги с одним пробелом) теги на странице.
$content = preg_replace('/<[^\/>]*>([\s]?)*<\/[^>]*>/', '', $content);
Это работало замечательно, пока ему не пришлось иметь дело с подобным контентом...
<blockquote>
<p >foo bar</p>
</blockquote>
<p ><a href="image.jpg" rel="lightbox" title=""><img title="image" src="image.jpg" /></a><br /></p>
и он выводит это как...
<blockquote>
<p >this is a test for the pluggin</p>
<p ><a href="image.jpg" rel="lightbox" title=""><img title="image" src="image.jpg" /></a><br /></p>
Таким образом, удаляя </blockquote>
.
Я ломал голову над этим вопросом и не могу заставить его работать.Может ли кто-нибудь увидеть очевидное решение, отличное от указания того, какие теги он должен форматировать?Я должен также сказать, что это форматирование 'the_content' в сообщении WordPress.
Решение
Регулярные выражения и HTML не очень хорошо сочетаются, поскольку HTML не является регулярным синтаксисом, и в нем нет крайних случаев и подводных камней.Вам будет лучше использовать анализатор HTML, такой как этот и проверка / манипулирование объектом DOM.
Другие советы
Возможно, вы также захотите взглянуть на Очиститель HTML, который является более продвинутым, чем простой HTML Dom, если вы обнаружите, что он не получает все теги.