Я пишу веб-браузер на PHP для устройств (таких как Kindle), которые не поддерживают просмотр с несколькими вкладками. В настоящее время я читаю исходный код страницы с помощью file_get_contents(), а затем повторяю его на странице. Моя проблема в том, что многие страницы используют локальные ссылки (например, ‹ img src='image.png>'), поэтому все они указывают на несуществующие страницы. Что я хочу сделать, так это найти все теги src и href и добавить полный веб-адрес к любому, который не начинается с «http://» или «https://». Как бы я это сделал?
Как сделать все строки src глобальными в PHP?
Ответы (2)
добавить <base href="http://example.com/" />
в шапке страницы
это поможет вам вставьте его в раздел <head></head>
<?php $url = "http://www.example.com"; $str = file_get_contents($url); $matche = array(); $pos = str_replace("<head>", '<head>\n<base href="http://www.example.com" />', $str); echo $pos; ?>
- person Skyler; 02.10.2011
Как elibyy предложил, я тоже рекомендовал бы использовать тег base
. Вот способ сделать это с помощью DOMDocument
PHP:
// 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-адресу из приведенного выше примера.
Однако как вы собираетесь различать, с какими ресурсами это можно сделать, а с какими нет? Если вы примените этот подход ко всем ресурсам на странице, ваше приложение быстро станет полноценным прокси-сервером, а значит, станет очень ресурсоемким.
Надеюсь, я дал вам краткий старт для некоторых вещей, чтобы принять во внимание.