我想为使用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;
}
答案 0 :(得分:2)
我在你的代码中看到了一些问题:
如何检测网址是否为相对网址。
相对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()
)内。