Не уверен, что я действительно понимаю, о чем вы спрашиваете, но если вы:
- Есть строка, которая содержит HTML
- и хотите заменить все ссылки на abc.com каким-либо текстом
Тогда, хорошее решение (лучше, чем регулярные выражения, я бы сказал!) будет использовать классы, связанные с DOM - особенно, вы можете взглянуть на DOMDocument
класс и его loadHTML
метод.
Например, учитывая, что часть HTML объявлена в переменной:
$html = <<<HTML
<p>some text</p>
<a href="http://abc.com">Title</a>
<p>some more text</p>
<a href="http://xyz.com">Title</a>
<p>and some again</p>
HTML;
Затем вы можете использовать что-то вроде этого:
$dom = new DOMDocument();
$dom->loadHTML($html);
$tags = $dom->getElementsByTagName('a');
for ($i = $tags->length - 1 ; $i > -1 ; $i--) {
$tag = $tags->item($i);
if ($tag->getAttribute('href') == 'http://abc.com') {
$replacement = $dom->createTextNode($tag->nodeValue);
$tag->parentNode->replaceChild($replacement, $tag);
}
}
echo $dom->saveHTML();
И в результате вы получите следующую порцию HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<p>some text</p>
Title
<p>some more text</p>
<a href="http://xyz.com">Title</a>
<p>and some again</p>
</body></html>
Обратите внимание, что вся часть <a href="http://abc.com">Title</a>
была заменена содержащимся в ней текстом.
Если вам нужен какой-то другой текст, просто используйте его там, где я использовал $tag->nodeValue
, который является текущим содержимым удаляемого узла.
К сожалению, да, генерируется полный HTML-документ, включая объявление doctype, теги <html>
и <body>
, ...