2009-12-12 13 views
0

J'ai créé cette expression pour supprimer tous les balises vides (y compris les balises avec des espaces) dans la page.preg_replace pour supprimer les balises vides mais conserver la fin des balises

$content = preg_replace('/<[^\/>]*>([\s]?)*<\/[^>]*>/', '', $content); 

Il a travaillé un régal jusqu'à ce qu'il devait traiter le contenu comme ça ...

<blockquote> 
<p >foo bar</p> 
</blockquote> 
<p ><a href="image.jpg" rel="lightbox" title=""><img title="image" src="image.jpg" /></a><br /></p> 

et il délivre en sortie comme ...

<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> 

Éliminant ainsi la </blockquote>.

Je me suis gratté la tête sur celui-ci et je n'arrive pas à le faire fonctionner. Quelqu'un peut-il voir une solution évidente autre que de spécifier quelles balises il devrait formater? Je devrais aussi dire qu'il met en forme 'the_content' sur un post wordpress.

Répondre

3

Les expressions rationnelles et le HTML ne sont pas une bonne correspondance, puisque HTML n'est pas une syntaxe régulière, et il n'y a pas de fin de casse et de gotchas. Il vaudra mieux utiliser un analyseur HTML tel que this one et inspecter/manipuler l'objet DOM.

0

Vous pouvez également jeter un oeil à HTML Purifier, qui est plus avancé que Simple HTML Dom, si vous trouvez qu'il ne reçoit pas tous les tags.