使用php domdocument添加根路径的问题

时间:2011-09-16 08:55:05

标签: php domdocument

我想为使用php dom文档的那些没有根路径的锚标签添加网站的根路径,直到现在已经用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;
}

2 个答案:

答案 0 :(得分:2)

我在你的代码中看到了一些问题:

  1. 决定URI是否具有完整的根路径(是完全限定的URI)。
  2. 您没有解析基本网址的相对网址。只是附加不起作用。
  3. 该函数返回一个DomDocument对象,而不是一个字符串。我假设你不想要,但我不知道,你没有写下你的问题。
  4. 如何检测网址是否为相对网址。

    相对URL未指定协议。所以我会检查一下,以确定href属性是否是完全限定(绝对)URI(Demo):

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

    解析基本网址的相对网址

    但是,这无法帮助您正确解析基本URL的相对URL。你做的是概念上的破坏。它在RFC中指定如何解析基URL(RFC 1808 and RFC 3986)的相对URI。您可以使用现有的库让工作为您完成,工作的是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);
    

答案 1 :(得分:1)

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

> 0位于函数调用(strpos())内。