PHP - 为没有http或https的所有链接添加网址

时间:2010-09-09 22:35:49

标签: php url

相对较新的php并寻求更新特定页面上的链接的一些帮助。该页面有许多链接,例如。 href=/link/并且我想对页面进行编码以识别这些链接(尚未包含httphttps的链接)并在前面加上网址,例如。每个www.domain.com。基本上以href=www.domain.com/link/结束。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:2)

我认为你想要解析一个URL列表,并将“http://”添加到那些没有URL的地方。

<?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 :(得分:1)

使用BASE element

更改文档的基本URI可能就足够了
<base href="http://example.com/link/">

这样新的基URI就是http://example.com/link/而不是文档的URI。这意味着,每个相对URI都是从http://example.com/link/解析而不是文档的URI。

答案 2 :(得分:0)

您总是可以在页面顶部使用输出缓冲,并使用回调功能将您的href重新格式化为您喜欢的方式:

function callback($buffer)
{
    return (str_replace(' href="/', ' href="http://domain.com/', $buffer));
}

ob_start('callback');

// rest of your page goes here

ob_end_flush();

答案 3 :(得分:0)

因为你在第一个问题中遗漏了关键细节,所以这是第二个答案。

执行@Nev Stokes所说的内容可能有效,但它也会获得更多标签。 You should never use regular expressions (or, worse, strp_replace) on HTML.

相反,请使用file_get_html() library并执行此操作:

<?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>