2011-09-16 76 views
0

我想爲那些沒有使用php dom文檔的根路徑的定位標籤添加站點的根路徑,直到現在有一​​個函數使用str_replace函數做了這個,但是爲了一些鏈接其添加三個和時間根路徑。那麼我應該在這個函數中編輯。使用php domdocument添加根路徑的問題

問題:=問題是它爲每個錨標記添加三個和時間根路徑,而不是一些。 $ HTML變量有許多錨標籤,大約有200個以上的鏈接。 而且圖像也相同。

我知道它很骯髒的問題,但我錯過了,我不能得到。

function addRootPathToAnchor($HTML) 
{ 
    $tmpHtml = ''; 
    $xml = new DOMDocument(); 
    $xml->validateOnParse = true; 
    $xml->loadHTML($HTML); 

    foreach ($xml->getElementsByTagName('a') as $a) 
    { 
     $href = $a->getAttribute('href'); 
     if(strpos($href,'www' > 0)) 
     continue; 
     else 
     $HTML = str_replace($href,"http://www.mysite.com/".$href,$HTML); 

    } 

    return $HTML; 
} 
+0

不要忘記告訴您用代碼運行哪些問題。很高興知道更好地幫助你更具體。 – hakre

+1

難道你不能只使用HTML-''-tag來達到同樣的效果嗎? – feeela

回答

2

我看到你的代碼的一些問題:

  1. 的URI是否具有完整的根路徑的決定(是一個完全合格的URI)與否。
  2. 您未解析相對於基本URL的URL。只是追加並不能完成這項工作。
  3. 該函數返回一個DomDocument對象而不是一個字符串。我假設你不想要這個,但我不知道,你沒有寫下你的問題。

如何檢測URL是否是相對的。

相對URL不指定協議。所以,我會檢查它來確定一個href屬性是否是一個完全合格的(絕對)URI或沒有(Demo):

$isRelative = (bool) !parse_url($url, PHP_URL_SCHEME); 

解析相對URL的基本URL

然而這將無助於您正確解析相對於基準網址的網址。你所做的是在概念上被打破。在RFC中指定了如何將相對URI解析爲基本URL(RFC 1808 and RFC 3986)。您可以使用現有的庫來讓工作爲您服務,工作區域爲Net_URL2

1

相反的if(strpos($href,'www' > 0))你應該使用if(strpos($href,'www') !== false)

> 0在函數調用(strpos())內。

+0

它不工作,同樣的問題,但你告訴我在函數內部有一個> 0的錯誤。 – Bajrang

+0

請再閱讀[strpos-documentation](http://php.net/manual/en/function.strpos.php):「以整數形式返回位置。」所以如果你檢查'strpos($ href,'www')> 0',這對於像www.example.com這樣的字符串是錯誤的。 – feeela