Замените все теги , содержащие данный атрибут 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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