Как сделать все строки src глобальными в PHP? - PullRequest
1 голос
/ 02 октября 2011

Я пишу веб-браузер на PHP для устройств (таких как Kindle), которые не поддерживают просмотр с несколькими вкладками.В настоящее время я читаю исходный код страницы с помощью file_get_contents (), а затем отображаю его на странице.Моя проблема в том, что многие страницы используют локальные ссылки (например, image'), поэтому все они указывают на страницы, которые не существуют.Я хочу найти все теги src и href и добавить полный веб-адрес к любому, который не начинается с "http://" или" https://".. Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 02 октября 2011

добавить <base href="http://example.com/" />

в начало страницы

этот поможет вам вставить его в <head></head> раздел

0 голосов
/ 02 октября 2011

Как и elibyy предложил , я бы тоже порекомендовал использовать тег 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.

Однако, как вы собираетесь различать, с какими ресурсами это делать, а с какими нет? Если вы воспользуетесь этим подходом для всех ресурсов на странице, ваше приложение быстро превратится в полноценный прокси-сервер, что станет очень ресурсоемким.

Надеюсь, я дал вам краткий старт для некоторых вещей, чтобы принять во внимание.

...