PHP - добавить URL ко всем ссылкам без http или https - PullRequest
0 голосов
/ 10 сентября 2010

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

Ответы [ 4 ]

2 голосов
/ 10 сентября 2010

Я думаю, что вы хотите проанализировать список 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/
)
*/
1 голос
/ 10 сентября 2010

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

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

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

0 голосов
/ 10 сентября 2010

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

Выполнение того, что говорит @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>
0 голосов
/ 10 сентября 2010

Вы всегда можете использовать буферизацию вывода вверху вашей страницы с обратным вызовом, который переформатирует ваши 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...