preg_replace для удаления пустых тегов, но сохранения конца кавычек блоков

StackOverflow https://stackoverflow.com/questions/1893260

  •  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, если вы обнаружите, что он не получает все теги.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top