簡體   English   中英

使用php domdocument添加根路徑的問題

[英]problem with adding root path using php domdocument

我想為那些沒有使用php dom文檔的根路徑的錨標記添加站點的根路徑,直到現在a已經使用str_replace函數創建了一個功能來執行此操作,但是對於某些鏈接,它添加了三遍,有時是根路徑。 然后,我應該在此功能中進行編輯。

問題 :=問題在於,它為每個錨標記(而不是某些錨)添加了三個根路徑。 $ 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;
}

我在您的代碼中看到了一些問題:

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

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

相對URL未指定協議。 因此,我將對此進行檢查以確定href屬性是否為完全限定的(絕對)URI( 演示 ):

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

將相對URL解析為基本URL

但是,這不會幫助您正確地將相對URL解析為基本URL。 您所做的在概念上是行不通的。 在RFC中指定了如何解析相對於基本URL的相對URI( RFC 1808和RFC 3986 )。 您可以使用現有的庫讓工作為您完成,可以使用的是Net_URL2

require_once('Net/URL2.php'); # or configure your autoloader

$baseUrl = 'http://www.example.com/test/images.html';

$hrefRelativeOrAbsolute = '...';

$baseUrl = new Net_URL2($baseUrl);

$urlAbsolute = (string) $baseUrl->resolve($hrefRelativeOrAbsolute);

而不是if(strpos($href,'www' > 0))您應該使用if(strpos($href,'www') !== false)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM