Emin değil ben gerçekten soruyorsun anlamak, ancak eğer:
- Bazı HTML içeren bir dize var
- ve bazı metin ile abc.com tüm bağlantıları değiştirmek istiyor
Özellikle sen DOMDocument
sınıfına bir göz atın, ve onun için - Sonra, iyi bir çözüm (better than regular expressions, should I say !) DOM ile ilgili sınıfları kullanmak olacaktır loadHTML
yöntemi.
For example, considering that the HTML portion is declared in a variable :
$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;
You could then use something like this :
$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();
And this would get you the following portion of HTML, as output :
<!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>
Note that the whole <a href="http://abc.com">Title</a>
portion has been replaced by the text it contained.
Yerine başka bir metin isterseniz ben $tag->nodeValue
kullanılan yerlerde, sadece Kaldırılan düğümün geçerli içerik olduğu, kullanabilirsiniz.
Ne yazık ki, evet, bu doctype beyanı, <html>
ve <body>
etiketleri de dahil olmak üzere, tam bir HTML belgesi oluşturur ...