[英]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;
}
我在您的代碼中看到了一些問題:
如何檢測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.