Php удалить css класс

php удалить тег с классом и его содержимое

dom xpath сделал свою работу отлично,
но «preg_replace» не удалял div с классом «remove»
могу ли я получить просветление от мастера регулярных выражений или других, которые могут?

$result2 = preg_replace('#
(.*?)
#s', ' ', $result);
$result2 = preg_replace('#
([\s\S]*?)
#', ' ', $result);

Кроме того, я обычно использовал \s+ вместо добавления пробела, на всякий случай, когда html имеет несколько пробелов.. так что:

$result2 = preg_replace('#([\s\S]*?)
#', ' ', $result);

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

$result2 = preg_replace('#]+\bclass\s*=\s*[\'\"]remove[\'\"][^>]*>([\s\S]*?)
#', ' ', $result);

* QUICK EDIT: я добавил \b чтобы определить границу слова, поэтому атрибут, такой как data-class , не будет сопоставляться вместо атрибута class .

Вот как вы продолжаете использовать правильный инструмент — используйте DomDocument/Xpath для удаления нежелательного div на основе имени класса: (не прибегайте к регулярному выражению) Код: (Демо)

$html = 
.

(some js and css)
(content)

(content that i didn't want to remove)

(content)
(content)
(content)
(content)

(content)

(content)

HTML;

libxml_use_internal_errors(true);
$dom=new DOMDocument;
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($dom);
foreach($xpath->query('//div[@class="remove"]') as $div) $div->parentNode->removeChild($div);
>
echo $dom->saveHTML();

 

.
(some js and css)

(content)

(content that i didn't want to remove)

Источник

в PHP, как удалить определенный класс из тега html?

Я просто хочу либо удалить, либо удалить любой класс, в котором есть «test2», поэтому результат будет следующим:

Я рад использовать выражение регулярного выражения или что-то вроде PHP Simple HTML DOM Parser, но я понятия не имею, как его использовать. И с регулярным выражением, я знаю, как найти элемент, но не конкретный связанный с ним атрибут, особенно если есть несколько атрибутов, подобных моему примеру выше. Есть идеи?

$notest2 = preg_replace( "/class\s*=\s*'[^\']*test2[^\']*'/", "class=''", $src); 

используя PHP Simple HTML DOM Parser

Обновлено и проверено! Вы можете включить simple_html_dom.php из приведенной выше ссылки или здесь .

include('../simple_html_dom.php'); $html = str_get_html("

text 1

text 2

text 4

");
foreach($html->find('span[class*="test2"]') as $e) $e->class = ''; echo $html; 
foreach($html->find('span[class*="test2"]') as $e) $e->parent()->innertext = $e->plaintext; echo $html; 

Класс DOMDocument – это очень простой и понятный интерфейс, который поможет вам работать с вашими данными в стиле DOM. Запрос вашей DOM с помощью селекторов xpath должен быть задачей (-ами) тем более тривиальным:

Очистить все классы

// Build our DOMDocument, and load our HTML $doc = new DOMDocument(); $doc->loadHTML($html); // Preserve a reference to our DIV container $div = $doc->getElementsByTagName("div")->item(0); // New-up an instance of our DOMXPath class $xpath = new DOMXPath($doc); // Find all elements whose class attribute has test2 $elements = $xpath->query("//*[contains(@class,'test2')]"); // Cycle over each, remove attribute 'class' foreach ($elements as $element) < // Empty out the class attribute value $element->attributes->getNamedItem("class")->nodeValue = ''; // Or remove the attribute entirely // $element->removeAttribute("class"); > // Output the HTML of our container echo $doc->saveHTML($div); 

Вы можете использовать любой DOM Parser, перебирать каждый элемент. Проверьте, содержит ли его атрибут class test2 class ( strpos () ), если это так, тогда установите пустую строку как значение для атрибута class .

Вы также можете использовать регулярные выражения для этого – гораздо более короткий путь. Просто найдите и замените ( preg_replace () ), используя следующее выражение: #class=».*?test2.*?»#is

Источник

CSS классы в классе Tag

Как вы видите, атрибут class содержит в себе несколько значений, разделенных пробелами. Эти значения представляют собой несколько CSS классов нашего элемента.

Давайте реализуем в нашем классе Tag набор методов, которые будут работать с этими CSS классами. Например, было бы удобно иметь метод addClass , добавляющий еще один класс в строку с классами.

При этом наш метод должен проверять то, что добавляемый класс еще не присутствует среди классов элемента, иначе добавление нового класса будет приводить к тому, что у элемента будет несколько одинаковых классов, что, конечно же, неправильно.

Пример использования желаемого нами метода:

Было бы также удобно иметь метод removeClass для удаления заданного класса элемента.

Практическое применение этих методов вы еще увидите в следующих уроках.

Давайте реализуем описанные методы.

Добавление класса

Как вы знаете, наш класс Tag хранит атрибуты тега в свойстве $this->attrs . Данное свойство представляет собой массив. В этом массиве может быть элемент с ключом class , содержащий CSS классы элемента. Элемента с таким ключом может, однако, и не быть.

Все зависит от того, был ли при создании тега вызван метод setAttr для установки атрибута class или нет.

Вот пример того, когда он был вызван:

А вот пример того, когда он не был вызван:

В реализации нашего метода addClass нужно будет учесть оба варианта.

Получается, что если у элемента не заданы CSS классы, то вызов метода addClass должен просто создавать в массиве $this->attrs новый элемент с ключом class и записывать в него переданный класс:

attrs: if (!isset($this->attrs[‘class’])) < $this->attrs[‘class’] = $className; // запишем наш CSS класс > return $this; // возвращаем $this для работы цепочки > ?>

Обратите внимание на то, что параметр метода называется $className , а не $class , так как слово class является зарезервированным в PHP и его нельзя использовать в качестве имени переменной.

Давайте теперь рассмотрим второй вариант, когда в $this->attrs[‘class’] уже есть один или несколько классов. Как уже упоминалось выше, эти классы были добавлены ранее с помощью метода setAttr . Эти классы также могли быть добавлены с помощью вызова метода (или цепочки методов) addClass .

Способ добавления, в общем-то, не имеет никакого значения, главное, что, если классы есть, то они хранятся в виде строки, разделенные пробелами. Либо, если там один класс, то в $this->attrs[‘class’] просто хранится его имя, без пробелов.

Пусть в $this->attrs[‘class’] хранится несколько классов. В этом случае будет удобнее работать не со строкой с пробелами, а с массивом CSS классов. Для этого можно просто разбить нашу строку в массив с помощью функции explode :

Затем необходимо проверить отсутствие переданного класса в этом массиве классов. Это легко сделать с помощью функции in_array :

Если переданного класса нет в массиве классов, то добавим его к уже существующим классам. А если есть — то просто ничего не будем делать.

Давайте реализуем добавление класса:

Рассмотрим теперь вариант, когда в $this->attrs[‘class’] хранится только один класс. На самом деле, реализованный выше код будет прекрасно работать и в этом случае: применение explode к строке без пробела просто вернет массив из одного элемента, представляющего собой эту строку. Ну и далее все наши манипуляции будут работать также.

Давайте соберем весь наш код вместе:

Самостоятельно реализуйте описанный метод и добавьте его в ваш класс Tag . Проверьте работу созданного метода, используя приведенные ниже примеры:

: echo (new Tag(‘input’)) ->setAttr(‘class’, ‘eee bbb’) ->addClass(‘eee’) // такой класс уже есть и не добавится ->open(); ?>

: echo (new Tag(‘input’)) ->addClass(‘eee’) ->addClass(‘bbb’) ->addClass(‘eee’) // такой класс уже есть и не добавится ->open(); ?>

Удаление класса

Давайте теперь реализуем удаление CSS класса. Для этого было бы удобно иметь вспомогательный метод, который будет удалять элемент из массива по тексту этого элемента. В PHP, к сожалению, нет такой встроенной функции, поэтому реализуем ее в виде приватного метода:

Используя метод removeElem мы теперь можем реализовать метод removeClass для удаления CSS классов. Реализуем:

Самостоятельно реализуйте описанный метод и добавьте его в ваш класс Tag . Проверьте его работу, например, так:

setAttr(‘class’, ‘eee zzz kkk’) // добавим 3 класса ->removeClass(‘zzz’) // удалим класс ‘zzz’ ->open(); // выведет ?>

Источник

Удалить class и id из css-файла

Задача такая: найти все классы (class) и индетификаторы (id) в css-Ффайле и проверить каждый, есть ли он в указанном html файле.
Если в html файле его нет, то корретно удалить из css-файла.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
function serachClass ($id_class)  GLOBAL $css; //Находим все классы $sclid = "/\\" . $id_class . "[\w_-]+(\, //Выделяем уникальные значения из массива $rezult_css = array_unique($rezult_css); //Делаем конечный массив foreach ($rezult_css as $key_val) { $rezult_css_go[] = trim(str_replace($id_class, "", $key_val)); } //Проверка существования класса(ID) в html-файле $serch = file_get_contents("./rezult/default/result.tpl"); for($i_serach = 0; $i_serach  count($rezult_css_go); $i_serach++) { if($id_class == ".") { if(preg_match("/class=\".*$rezult_css_go[$i_serach].*\"/", $serch)) { echo "Класс " . $rezult_css_go[$i_serach] . " найден в базе 
"
; } else { $bvcbvc = "/[^\>]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^>]+\>/is"; $css = preg_replace($bvcbvc,'', $css); } } elseif($id_class == "#") { if(preg_match("/id=\".*$rezult_css_go[$i_serach].*\"/", $serch)) { echo "ID " . $rezult_css_go[$i_serach] . " найден в базе
"
; } else { $bvcbvc = "/[^\>]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^>]+\>/is"; $css = preg_replace($bvcbvc,'', $css); } } } } serachClass("."); serachClass("#");

Классы и ID определяются верно.

Проблема в регулярке, которая удаляет в css-файле не найденные в html-коде классы и ID. Т.е. вот в этой:

$bvcbvc = "/[^\>]*?\\" . $id_class . $rezult_css_go[$i_serach] . "[^>]+\>/is"; $css = preg_replace($bvcbvc,'', $css);

Почему-то удаляется часть элементов, которые были найдены в html-файле.
К сожалению, не смог отследить закономерность.

Не могу понять, в чем моя ошибка?

Источник

Регулярные выражения для удаления тегов

Подборка регулярных выражений для удаления HTML тегов и атрибутов.

Удаление тегов

$text = '

Текст текст

'; echo preg_replace('/\s?]*?>.*?\s?/si', ' ', $text);

Результат:

По аналогии удаление тегов

, и :

echo preg_replace('/\s?]*?>.*?\s?/si', ' ', $text); echo preg_replace('/\s?]*?>.*?\s?/si', ' ', $text); echo preg_replace('/\s?]*?>.*?\s?/si', ' ', $text);

Удаление атрибутов

Результат:

Удалить все атрибуты у тегов:

Результат:

Удалить атрибуты только у определенных HTML тегов:

$text = preg_replace("/()/i", '\\1\\2', $text); $text = preg_replace("/()/i", '\\1\\2', $text);

Удаление тегов в ячейках таблицы

Регулярные выражения удаляют теги

и , но оставляет их содержание.

$text = ' 
text 1

text 2

text 3
'; // Удаление

$text = preg_replace('/(]*>)(.*)(]*>)(.*)()(.*)()/i', '\\1\\2\\4\\6\\7', $text); // Удаление

$text = preg_replace('/(]*>)(.*)(]*>)(.*)()(.*)()/i', '\\1\\2\\4\\6\\7', $text); print_r($text);

Результат:

Комментарии

Другие публикации

Регулярные выражения для замены на теги

Поиск похожих текстов в базе данных MySQL + PHP

Работа с FTP в PHP

Протокол FTP – предназначен для передачи файлов на удаленный хост. В PHP функции для работы с FTP как правило всегда доступны и не требуется установка дополнительного расширения.

Contenteditable – текстовый редактор

Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а.

Как дописать стили в атрибут style тегов HTML через PHP

Данный вопрос возникает при верстке писем т.к. стили прописанные в head в почтовых сервисах и программах не работают, а.

Автоматическое оглавление для статьи

Задача: появилась необходимость сделать якорное меню у ранее опубликованных статей, статей много, вручную дополнять их.

Источник

Читайте также:  font-family
Оцените статью