В некоторых из наших статей у нас есть изображения, которые по ошибке содержат ссылки, жестко закодированные в атрибуты title / alt тегов изображения, что нарушает отображение изображения. Например:
<img src="/imgs/my-image.jpg" title="This is a picture of a <a href="/blob.html">blob</a>." />
Я попытался использовать функцию preg_replace_callback, но трудно сопоставить полный заголовок из-за повторяющихся кавычек из ссылки.
Я хотел бы иметь возможность сделать это программно на лету для любой строки, чтобы обеспечить правильный вывод. Идеи?
Вы можете попробовать этот тип шаблона:
$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
якорь.
Других решений пока нет …