Не удалось получить изображение Src с помощью регулярных выражений - PullRequest
0 голосов
/ 09 ноября 2018

Я использую приведенное ниже регулярное выражение для добавления элемента перед тегом изображения, но это не работает. Я взял этот код из Добавить ссылку вокруг тегов img с помощью регулярного выражения

preg_replace('#(<img[^>]+ src="([^"]*)" alt="[^"]*" />)#', '<a href="$2" ...>$1</a>', $str)

Однако, если я использую приведенный ниже код без src, это работает.

 preg_replace('#(<img[^>]+ alt="[^"]*" />)#', '<a href="" ...>$1</a>', $str)

Любая причина, по которой я не могу получить src из тега изображения.

Мой тег изображения <img src="" alt="">

1 Ответ

0 голосов
/ 09 ноября 2018

Лучший способ сделать что-то подобное - использовать класс PHP DOMDocument, поскольку он не зависит от того, как люди пишут свой HTML (например, помещая атрибут alt перед атрибутом src). Примерно так будет работать для вашего случая:

$html = '<div id="x"><img src="/images/xyz" alt="xyz" /><p>hello world!</p></div>';
$doc = new DomDocument();
$doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DomXPath($doc);
$images = $xpath->query('//img');
foreach ($images as $img) {
    // create a new anchor element
    $a = $doc->createElement('a');
    // copy the img src attribute to the a href attribute
    $a->setAttribute('href', $img->attributes->getNamedItem('src')->nodeValue);
    // add the a to the images parent
    $img->parentNode->replaceChild($a, $img);
    // make the image a child of the <a> element
    $a->appendChild($img);
}
echo $doc->saveHTML();

Выход:

<div id="x"><a href="/images/xyz"><img src="/images/xyz" alt="xyz"></a><p>hello world!</p></div>

Демонстрация на 3v4l.org

...