我正在用PHP编写一个web浏览器,用于不支持多选项卡浏览的设备(如Kindle)。目前,我正在使用file_get_contents()读取页面源,然后将其回显到页面中。我的问题是许多页面使用本地引用(例如'),所以它们都指向不存在的页面。我想做的是找到所有src和href标签,并将完整的网址添加到任何不以"http://"或"https://"开头的网址。我该怎么做呢?
add <base href="http://example.com/" />
在页首
这将帮助您将它插入到<head></head>
部分
就像eliby建议的那样,我也建议使用base
标签。这里有一种使用PHP本地DOMDocument
的方法:
// example url
$url = 'http://example.com';
$doc = new DOMDocument();
$doc->loadHTMLFile( $url );
// first let's find out if there a base tag already
$baseElements = $doc->getElementsByTagName( 'base' );
// if so, skip this block
if( $baseElements->length < 1 )
{
// no base tag found? let's create one
$baseElement = $doc->createElement( 'base' );
$baseElement->setAttribute( 'href', $url );
$headElement = $doc->getElementsByTagName( 'head' )->item( 0 );
$headElement->appendChild( $baseElement );
}
echo $doc->saveHTML();
话虽如此;你确定你知道你的目标有多远大吗?
例如,我不认为这正是你真正需要的,因为你的应用程序基本上是作为一个代理。因此,您可能希望至少将所有用户可点击的链接路由到您的应用程序中,而不是将它们直接路由到原始链接,因为我认为您希望将用户保留在您的选项卡应用程序中,而不是脱离它。类似:
http://yourapplication.com/resource.php?resource=http://example.com/some/path/
现在,这当然可以通过基本上做你所要求的来实现,而不是在它前面加上http://
或https://
,这样它就会产生上面的示例url。
然而,你如何辨别哪些资源可以使用,哪些资源不可以使用?如果您对页面中的所有资源采用这种方法,您的应用程序将很快成为一个完整的代理,从而变得非常资源密集。