使用php domdocument添加根路径时出现问题

使用php domdocument添加根路径时出现问题,php,domdocument,Php,Domdocument,我想为那些使用PHPDOM文档没有根路径的锚定标记添加站点的根路径,到目前为止,我已经用str_replace函数做了一个函数来实现这一点,但是对于一些链接,它添加了三倍的根路径。那么我应该在这个函数中编辑什么 问题:=问题在于为每个锚定标记添加三倍的根路径,而不是某些锚定标记。 $HTML变量有许多锚定标记,大约超过200个链接。 图像也是如此 我知道这是一个非常肮脏的问题,但我错过了什么,我无法得到 function addRootPathToAnchor($HTML) { $tmp

我想为那些使用PHPDOM文档没有根路径的锚定标记添加站点的根路径,到目前为止,我已经用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;
}
您不应该使用
if(strpos($href,'www'>0))
而应该使用
if(strpos($href,'www')!==false)


>0
在函数调用中(
strpos()
)。

我发现您的代码中存在一些问题:

  • 决定URI是否具有完整的根路径(是完全限定的URI)
  • 您没有将相对URL解析为基本URL。仅仅追加并不起作用
  • 该函数返回DomDocument对象,而不是字符串。我想你不想这样,但我不知道,你的问题里没有写
  • 如何检测URL是否为相对URL。

    相对URL不指定协议。因此,我将检查该属性以确定href属性是否为完全限定(绝对)URI():

    将相对URL解析为基本URL

    但是,这不会帮助您正确地将相对URL解析为基本URL。你所做的在概念上是不正确的。在RFC中指定了如何将相对URI解析为基本URL()。您可以使用现有库让工作为您完成,工作库是:


    不要忘记告诉您的代码运行时遇到了哪些问题。如果您能更好地帮助您,那就太好了。您能不能只使用HTML-
    -标记来达到同样的效果?它不起作用,同样的问题,但您告诉我函数中有一个错误>0。请阅读“将位置作为整数返回”。因此,如果您检查
    strpos($href,'www')>0
    ,则,对于像“www.example.com”这样的字符串,这将是false。
    $isRelative = (bool) !parse_url($url, PHP_URL_SCHEME);
    
    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);