html / php - очистить изображение с помощью анализа HTML или регулярного выражения? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь очистить некоторый устаревший контент в моей CMS, чтобы унифицировать способ использования тегов, я хотел начать с изображений, но столкнулся с некоторыми проблемами.

Содержимое в тегах изображений, таких как alt, srcset, sizes, ... не всегда используются, и когда они используются, они не всегда используются в одном и том же порядке.Я пытался очистить мой код под двумя разными углами:

  1. Разбор HTML

Я пробовал PHP простой HTML-код dom и альтернативу через PHP с помощью следующего кода: (этопросто пример, я не хочу, чтобы класс был установлен на «blabla»)

$dom = new DOMDocument;
$dom->loadHTML($html);
$images = $dom->getElementsByTagName('img');
foreach ($images as $image) 
  {
    $image->setAttribute('class', 'blabla');
  }
$html = $dom->saveHTML();

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

<section id="mysection">
<div class="mydiv">test</div>
<section>

, и я в итоге получаю следующее:

<section id="mysection">
test
<section>

Поскольку этот первый метод фактически ухудшил мою проблему, я попытался работать с REGEX.

REGEX

Я пошел простым путем, используя следующую схему: /<img(.*)>/, а затем я взорвал бы результат, чтобы идентифицировать все теги внутри img.Проблема, с которой я столкнулся, заключается в том, что REGEX проигнорировал окончание > выражения и в итоге взял много нежелательного HTML-кода.Он должен остановиться при первом появлении >, но я не знаю, как это сделать.

Я полагаю, что синтаксический анализ html должен быть предпочтительным методом для такого рода операций, но синтаксический анализ разрушает мой код.

У вас есть представление о том, какой метод мне следует использовать для решения этой проблемы?

...