Замените все теги , содержащие данный атрибут href, на Regex или DOM.Html

Программисты Html
Anonymous
Замените все теги , содержащие данный атрибут href, на Regex или DOM.

Сообщение Anonymous »

Я борюсь с этим. Идея состоит в том, чтобы заменить все теги , содержащие определенный атрибут href внутри заданной строки (которая поступает из буфера и представляет собой обычный HTML, но иногда имеет неверный формат).

Я пытался использовать подход PHP DOM, а также библиотеку синтаксического анализатора SimpleHTMLDOM, пока у меня ничего не работает (проблема в том, что подход DOM возвращает только ссылки внутри элемента , а не в разделе страницы), поэтому я решил использовать регулярное выражение.
Вот неработающий код подхода PHP DOM:

Код: Выделить всё

function remove_css_links($string = "", $css_files = array()) {
$css_files = array("http://www.example.com/css/css.css?ver=2.70","style.css?ver=3.8.1");
$xml = new DOMDocument();
$xml->loadHTML($string);
$link_list = $xml->getElementsByTagName('link');
$link_list_length = $link_list->length;
//The cycle
for ($i = 0; $i < $link_list_length; $i++) {
$attributes = $link_list->item($i)->attributes;
$href = $attributes->getNamedItem('href');
if (in_array($href->value, $css_files))  {
//Remove the HTML node
}
}
$string = $xml->saveHTML();
return $string;
}
Вот код регулярного выражения, однако я знаю, что всем вам не рекомендуется использовать его для парсинга HTML, но давайте не будем обсуждать это здесь и сейчас:

Код: Выделить всё

$html_text = '







...some content...


';
$url = preg_quote("http://www.example.com/css/css.css?ver=2.70");
$pattern = "~]+) href=".$url."/?>~";
$link = preg_replace($pattern, "", $html_text);
Проблема с регулярным выражением заключается в том, что атрибут href может находиться в любом месте внутри тега , а этот атрибут, который я использую, может обнаруживать любые типы тегов , как вы можете видеть, я не хочу удалять значок ярлыка или альтернативные их типы, а также все, что отличается от заданного URL-адреса, поскольку атрибут href. Вы можете заметить, что теги содержат кавычки разного типа, одинарные и/или двойные.

Однако я открыт для предложений, и если возможно заставить работать подход DOM вместо использования регулярных выражений - это нормально.

Подробнее здесь: https://stackoverflow.com/questions/219 ... gex-or-dom

Вернуться в «Html»