2010-04-24 58 views
0

我:替換文本(PHP)從特定域鏈接

<a href="http://abc.com">Title</a> 

和:

<a href="http://xyz.com">Title</a> 

我想替換鏈接到文本 「標題」,但只能從http://abc.com。但我不知道(我試過谷歌),你能爲我解釋一下嗎?我不擅長PHP。

在此先感謝。

回答

3

不知道我真的明白你問什麼,但如果你:

  • 有一個字符串,其中包含一些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>標籤,...

+0

謝謝你,它的工作原理。但是當我使用Magpie RSS通過RSS feed解析內容時,我想要替換的鏈接通常是動態的。我的意思是在標籤的RSS鏈接像http://abc.com/tag/tag1,http://abc.com/tag/tag2 ....我可以用文本替換所有這些鏈接? – nuphero 2010-04-25 07:35:00

1

爲了掩蓋另一種解釋情況:

$string = '<a href="http://abc.com">Title</a> <a href="http://xyz.com">Title</a>'; 
$pattern = '/\<\s?a\shref[\s="\']+([^\'"]+)["\']\>([^\<]+)[^\>]+\>/'; 
$result = preg_replace_callback($pattern, 'replaceLinkValueSelectively', $string); 

function replaceLinkValueSelectively($matches) 
{ 
    list($link, $URL, $value) = $matches; 

    switch ($URL) 
    { 
     case 'http://abc.com': 
      $newValue = 'New Title'; 
      break; 

     default: 
      return $link; 
    } 

    return str_replace($value, $newValue, $link);   
} 

echo $result; 

輸入

<a href="http://abc.com">Title</a> <a href="http://xyz.com">Title</a> 

變成

<a href="http://abc.com">New Title</a> <a href="http://xyz.com">Title</a> 

$ string是您的輸入,$ result是您輸入的修改。您可以定義更多的URL作爲案例。 請注意:我寫的正則表達式倉促,我很新手。請檢查它是否適合您的所有預期情況。