PHP. Подготовьте URL-адрес ко всем ссылкам без http или https.

Относительно новый для php и ищет некоторую помощь в обновлении ссылок на определенной странице. На странице есть многочисленные ссылки, например. href=/link/ и я хотел бы закодировать страницу, чтобы идентифицировать эти ссылки (ссылки, которые еще не имеют http или https ), и добавление с помощью URL-адреса, например. www.domain.com для каждого. В основном заканчивается href=www.domain.com/link/ . Любая помощь будет принята с благодарностью.

Я думаю, вы хотите проанализировать список URL-адресов и добавить «http: //» к тем, у кого их нет.

 <?php $links = array('http://www.redditmirror.cc/', 'phpexperts.pro', 'https://www.paypal.com/', 'www.example.com'); foreach ($links as &$link) { // Prepend "http://" to any link missing the HTTP protocol text. if (preg_match('|^https*://|', $link) === 0) { $link = 'http://' . $link . '/'; } } print_r($links); /* Output: Array ( [0] => http://www.redditmirror.cc/ [1] => http://phpexperts.pro/ [2] => https://www.paypal.com/ [3] => http://www.example.com/ ) */ 

Возможно, достаточно просто изменить базовый URI документа с помощью элемента BASE :

 <base href="http://example.com/link/"> 

При этом новый базовый URI является http://example.com/link/ а не URI документа. Это означает, что каждый относительный URI разрешен с http://example.com/link/ а не URI документа.

Вы всегда можете использовать буферизацию вывода в верхней части страницы с обратным вызовом, который переформатирует ваши hrefs так, как вы хотели бы их:

 function callback($buffer) { return (str_replace(' href="/', ' href="http://domain.com/', $buffer)); } ob_start('callback'); // rest of your page goes here ob_end_flush(); 

Потому что вы оставили важные детали в своем первом вопросе, вот второй ответ.

Выполнение того, что говорит @Nev Stokes может работать, но оно также получит больше, чем теги. Вы никогда не должны использовать регулярные выражения (или, что еще хуже, strp_replace) в HTML.

Вместо этого используйте библиотеку file_get_html() и выполните следующее:

 <?php require 'simplehtmldom/simple_html_dom.php'; ob_start(); ?> <html> <body> <a id="id" href="/my_file.txt">My File</a> <a name="anchor_link" id="boo" href="mydoc2.txt">My Doc 2</a> <a href="http://www.phpexperts.pro/">PHP Experts</a> </body> </html> <?php $output = ob_get_clean(); $html = str_get_html($output); $anchors = $html->find('a'); foreach ($anchors as &$a) { if (preg_match('|^https*://|', $a->href) === 0) { // Make sure first char is /. if ($a->href[0] != '/') { $a->href = '/' . $a->href; } $a->href = 'http://www.domain.com' . $a->href; } } echo $html->save(); 

Вывод:

 <html> <body> <a id="id" href="http://www.domain.com/my_file.txt">My File</a> <a name="anchor_link" id="boo" href="http://www.domain.com/mydoc2.txt">My Doc 2</a> <a href="http://www.phpexperts.pro/">PHP Experts</a> </body> </html>