2013-08-23 104 views
0

我需要用php文件中的一些文本替換所有<a> hrefs。我已經使用如何在php中替換href鏈接

preg_replace('#\s?<a.*/a>#', 'text', $string); 

但是這會替換所有具有相同文本的鏈接。每個鏈接都需要不同的文字。 如何做到這一點。也有可能完全獲得href鏈接,意味着如果我有一個包含鏈接<a href="www.google.com">Google</a>的文件,我如何提取字符串'<a href="www.google.com">Google</a>'

請幫幫我。

+2

只是解析DOM已經... –

+0

使用http://php.net/domdocument - 其他一切都是廢話,真的。如果您想要替換一些靜態鏈接,請使用strireplace。如果更復雜,則解析DOM。 – DanFromGermany

回答

1

使用DOMDocument。

$dom = new DOMDocument; 
$dom->loadHTML($html); 
foreach ($dom->getElementsByTagName('a') as $node) { 
    //Do your processing here 
} 
0

OK,因爲有一個關於如何操作DOM的方式沒有明確的答案,我想,你需要處理它:

$foo = '<body><p> Some BS and <a href="https://www.google.com"> Link!</a></p></body>'; 
$dom = new DOMDocument; 
$dom->loadHTML($foo);//parse the DOM here 
$links = $dom->getElementsByTagName('a');//get all links 
foreach($links as $link) 
{//$links is DOMNodeList instance, $link is DOMNode instance 
    $replaceText = $link->nodeValue.': '.$link->getAttribute('href');//inner text: href attribute 
    $replaceNode = $dom->createTextNode($replaceText);//create a DOMText instance 
    $link->parentNode->replaceChild($replaceNode, $link);//replace the link with the DOMText instance 
} 
echo $dom->saveHTML();//echo the HTML after edits... 

此推出:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><p> Some BS and Link!: https://www.google.com</p></body></html> 

剛開始閱讀the DOMDocument手冊,並點擊我在這裏使用的所有方法(和相關類)。 DOMDocument API,就像客戶端JS中的DOM API一樣笨重,並不那麼直觀,但這就是它的樣子......
迴應實際的html,沒有doctype可以使用saveXML方法完成,並且/或some string operations ...總而言之,使用此代碼作爲基礎和提供的鏈接不應該太難以達到您想要的位置。