如何使所有src字符串在PHP全局


How to make all src strings global in PHP?

我正在用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。

然而,你如何辨别哪些资源可以使用,哪些资源不可以使用?如果您对页面中的所有资源采用这种方法,您的应用程序将很快成为一个完整的代理,从而变得非常资源密集。