Уберите теги HTML из заголовка и атрибутов alt тега изображения

В некоторых из наших статей у нас есть изображения, которые по ошибке содержат ссылки, жестко закодированные в атрибуты title / alt тегов изображения, что нарушает отображение изображения. Например:

<img src="/imgs/my-image.jpg" title="This is a picture of a <a href="/blob.html">blob</a>." />

Я попытался использовать функцию preg_replace_callback, но трудно сопоставить полный заголовок из-за повторяющихся кавычек из ссылки.

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

0

Решение

Вы можете попробовать этот тип шаблона:

$pattern = <<<'EOD'
~
(?:
\G(?!\A)                 # second entry point
(?:                        # content up to the next alt/title attribute (optional)
[^><"]* "                 # end of the previous attribute
(?> [^><"]* " [^"]* " )*? # other attributes (optional)
[^><"]*                   # spaces or attributes without values (optional)
\b(?:alt|title)\s*=\s*"   # the next alt/title attribute
)?+                        # make all the group optional
|
<img\s[^>]*?             # first entry point
\b(?:alt|title)\s*=\s*")
[^<"]*+\K
(?:              # two possibilities:
</?a[^>]*>     # an "a" tag (opening or closing)
|                # OR
(?=")          # followed by the closing quote
)
~x
EOD;

$result = preg_replace($pattern, '', $html);

онлайн демо

Этот тип шаблона использует непрерывность повторного совпадения с \G якорь.

0

Другие решения

Других решений пока нет …