Проверка и удаление пустых тегов с помощью PHP - PullRequest
0 голосов
/ 20 декабря 2010

Какой самый быстрый способ удалить пустые теги html из строки?

Я запрограммировал что-то вроде этого для обнаружения пустых тегов привязки:

                        $temp = strip_tags($string, "<blockquote><a>");
                        $cmatch = array();
                        if(preg_match_all("~<a.*><\/a>~iU", $temp, $cmatch, PREG_SET_ORDER))
                        {
                            foreach($cmatch as $cm)
                            {
                                foreach($cm as $t) //echo htmlentities($t)."<br />";
                                $temp = trim(str_replace($t, '', $temp));
                            }
                        }

                        if(!empty($temp))
                        {
                            echo '<div class="c" style="margin-top:20px;">';
                            echo $temp;
                            echo '</div>';
                        }
                        //do not output if empty tags (problem with div margin)

Это должно быть возможно сделатьэто более эффективно.Будет ли быстрее преобразовать строку в HTML DOM и выполнить проверку там?

1 Ответ

1 голос
/ 20 декабря 2010

Регулярные выражения не подходят для анализа HTML.

В качестве неспецифического ответа я настоятельно рекомендую использовать для этого библиотеку анализа DOM. Чтобы назвать несколько ошибок, которые сделают регулярные выражения кошмаром:

  1. Вы можете поймать <a></a> теги, но поймаете ли вы <a /> теги?
  2. Является ли следующий тег p пустым ?: <p><a></a></p> Если так, ваш код его поймает? Если этого не произойдет, сколько проходов вам нужно будет запустить на струне, прежде чем вы будете достаточно уверены, чтобы поймать их всех?
  3. Будете ли вы ловить теги, которые не закрыты должным образом?
  4. Будете ли вы ловить теги, которые перекрываются?
...