2011-03-15 87 views
0

我有以下結構...php preg_replace:找到鏈接並添加#hash到它?

$output = '<li><a href="http://forum.example.org">Something</a></li>' 其實$輸出保存多個列表項。

對每個鏈接href應用#hash的最佳和最簡單的方法是什麼?在...

<li><a href="http://forum.example.org#something">Something</a></li>

不知道如何解決?

編輯:順便說一句,它應該總是相同的#hash不像你在上面這個例子中想的那樣,#something等於鏈接的名字。所以它應該是每個鏈接的東西。

add_filter('wp_list_pages', 'add_hash'); /*Add #hash to wp_list_pages() function*/ 
function add_hash($output) { 

     $dom = new DOMDocument(); 
     $dom->loadHTML($output); 

     $a_tags = $dom->getElementsByTagName('a'); 

     foreach($a_tags as $a) 
     { 
      $value = $a->getAttribute('href'); 
      $a->setAttribute('href', $value . '#b'); 
     } 

     $dom->saveHTML(); 

     return $output; 
} 
+0

你應該儘量適應名單代插入的代碼#hashes而不是修改連接的結果。 – mario 2011-03-15 20:37:50

回答

1
$dom = new DOMDocument(); 
$dom->loadHTML($str); // Change to input variable 

$a_tags = $dom->getElementsByTagName('a'); 

foreach($a_tags as $a) 
{ 
    $value = $a->getAttribute('href'); 
    $a->setAttribute('href', $value . '#something'); 
} 

// Get the new document with: $dom->saveHTML() 

編輯:

在你上面的代碼,你需要改變:

 $dom->saveHTML(); 

     return $output; 
} 

要:

 return $dom->saveHTML(); 
} 
+0

downvote的任何原因? – 2011-03-15 20:31:22

+0

它不起作用!當我嘗試\t'echo $ value;'在foreach循環內工作正常,但是當我嘗試'echo $ a;'頁面的其餘部分沒有得到輸出時。我的控制檯告訴我'PHP致命錯誤:調用未定義的方法DOMNodeList :: setAttribute()' – matt 2011-03-15 20:47:48

+0

@mathiregister:你能用你試過的確切代碼編輯你的問題嗎? – 2011-03-15 20:49:57