Usuwanie pustych tagów html
2009-01-18Dzisiaj krótka recepta, na pozbywanie się z tekstu pustych tagów html. Jest to przydatne na przykład gdy używamy TinyMCE, który czasami poza naszą kontrolą wstawia tagi, które mają w CSS’ie ustawiony margines lub padding – wtedy tekst będzie nienaturalnie porozciągany w takich miejscach. Aby to osiągnąć, skorzystamy z funkcji preg_replace i odpowiedniego wyrażenia regularnego.
$text = '<h1 style="color:red">Header</h1>'; $text.= '<h1 style="color:red"></h1>'; $text.= '<div style="padding: 50px" class="dummy">Dummy text</div>'; $text.= '<div style="padding: 50px" class="dummy"></div>'; $text = preg_replace('#<(w+)s?[^>]*></1>#', '', $text);
Po takiej operacji zmienna $text będzie zawierała:
<h1 style="color:red">Header</h1><div style="padding: 50px" class="dummy">Dummy text</div>
czyli tekst oczyszczony z pustych tagów.
Krótkiego wyjaśnienia wymaga wzorzec, jakiego użyłem w preg_replace. Na początku szukamy co najmniej jednego słowa (w+) i przechwytujemy go, ujmując w nawiasy. Następnie może (ale nie musi) wystąpić biały znak (s – np. spacja), a po nim dowolny ciąg znaków, nie zawierający znaku > (np. style=”color:red”), lub pusty łańcuch znaków. Potem zamykamy tag, otwieramy nowy tag zamykający i używamy pierwszego backreference (1), czyli wyrażenia, które przechwyciliśmy nawiasami na początku wyrażenia regularnego. Pozwala nam to wykryć zamknięcie takiego samego znacznika.