PHP file_get_contents - 替换所有<a href=""> links</a>中的所有网址

时间:2013-01-29 00:09:31

标签: php arrays html-email file-get-contents

已解决:在下方回答

如何:   - 使用file_get_contents从文件中获取所有网址。 该文件可以动态显示并具有多个网址   - 使用自定义新网址替换所有网址,并将最后的现有网址添加为变量

示例:

www.ABC.com 链接更改为 www.MyWebsite.com/?link=www.ABC.com

文件名:myHTML.html 将使用file_get_contents

提取的HTML电子邮件
<body>
<p>&nbsp;</p>
<p><a href="http://www.CNN.com" target="_blank">Link One</a></p>
<p><a href="http://www.ABC.com" target="_blank">Link Two</a></p>
<p><a href="http://www.foxnews.com/politics/2013/01/28/us-planning-for-new-drone-base-in-northwest-africa-officials-say/" target="_blank">Link Three</a></p>
<p><a href="ObamaMustSee.com" target="_blank">Link Four</a></p>
</body>

需要输出以下代码:

 <body>
<p>&nbsp;</p>
<p><a href="http://www.MyWebsite.com/?link=http://www.CNN.com" target="_blank">Link One</a></p>
<p><a href="http://www.MyWebsite.com/?link=http://www.ABC.com" target="_blank">Link Two</a></p>
<p><a href="http://www.MyWebsite.com/?link=http://www.foxnews.com/politics/2013/01/28/us-planning-for-new-drone-base-in-northwest-africa-officials-say/" target="_blank">Link Three</a></p>
<p><a href="http://www.MyWebsite.com/?link=ObamaMustSee.com" target="_blank">Link Four</a></p>
</body>

下面对我有用的答案! 附: +1如果这有助于你:)

5 个答案:

答案 0 :(得分:2)

此代码将从给定字符串中提取所有HTTP URL并将它们放入数组中,以便您可以从数组中执行任何您想要的链接:

<?php
$string = "Test http://www.google.com test2 http://www.something.com test3 http://abc.com";
preg_match_all('!https?://[\S]+!', $string, $match);

$URLs = array();

foreach ($match as $key => $value)
    foreach ($value as $key2 => $TheUrl)
        $URLs[] = $TheUrl;


for ($i=0;$i<count($URLs);$i++)
    echo $URLs[$i]."\r\n";

?>

现在,您将$ string变量中给出的字符串中的所有URL都放入$ URLs数组中。您可以print_r URL数组以查看它的内容或使用for循环遍历它(如我的示例所示)。

现在,如果要替换字符串中的所有网址,可以执行以下操作:

for ($i=0;$i<count($URLs);$i++)
    $string = str_replace($URLs[$i], "http://www.mysite.com?newurl=".$URLs[$i], $string);

例如,它会将所有网址字符串替换为http://www.mysite.com?newurl=[ACTUAL URL]

答案 1 :(得分:1)

这太无聊了?试试这个;

$s = preg_replace_callback('~<a\s+href="(.*?)"(.*?)>(.*?)</a>~i', function($m){
    return sprintf('<a href="http://www.MyWebsite.com/?link=%s"%s>%s</a>', urlencode($m[1]), $m[2], $m[3]);
}, $html);
echo $s;

出;

<body>
<p>&nbsp;</p>
<p><a href="http://www.MyWebsite.com/?link=http%3A%2F%2Fwww.CNN.com" target="_blank">Link One</a></p>
<p><a href="http://www.MyWebsite.com/?link=http%3A%2F%2Fwww.ABC.com" target="_blank">Link Two</a></p>
<p><a href="http://www.MyWebsite.com/?link=http%3A%2F%2Fwww.foxnews.com%2Fpolitics%2F2013%2F01%2F28%2Fus-planning-for-new-drone-base-in-northwest-africa-officials-say%2F" target="_blank">Link Three</a></p>
<p><a href="http://www.MyWebsite.com/?link=ObamaMustSee.com" target="_blank">Link Four</a></p>
</body>

答案 2 :(得分:0)

我建议在http://simplehtmldom.sourceforge.net/使用PHP简单HTML DOM,因为它会使这变得更加容易。然后你只需要做一些事情:

require 'simple_html_dom.php';
function trackLinks($filename) {
    $message = file_get_contents($filename);
    foreach($message->find('a') as $link) {
        $link->href="htto://www.myWebsite.com/?link=".$link->href;
    }
    file_put_contents($filename,$message->innertext);
}

答案 3 :(得分:0)

有效的PHP代码

调用文件并替换链接的PHP代码

<?php

$message = file_get_contents("myHTML.html");


$content = explode("\n", $message);

$URLs = array();

for($i=0;count($content)>$i;$i++)
{
     if(preg_match('/<a href=/', $content[$i]))
      {
    list($Gone,$Keep) = explode("href=\"", trim($content[$i]));
    list($Keep,$Gone) = explode("\">", $Keep);
    $message= strtr($message, array( "$Keep" => "http://www.MyWesite.com/?link=$Keep", ));
      }
}

echo $message;

?>

答案 4 :(得分:0)

您可以逐行读取文件,并使用正则表达式搜索URL,将其替换为您自己的URL。 这就是我要做的事情:

$src = fopen('myHTMLemail.php', 'r');
$dest = fopen('myHTMLemail_changed.php', 'w');


while(false !== ($line = fgets($src)))
{
    if(preg_match('/href./', $line))
    {   
        fwrite($dest, preg_replace('/href="([^"]*)"/', 'http://www.myWebsite.com?link=${1}', $line));
    }   
    else
    {   
        fwrite($dest, $line);
    }   
}
fclose($dest);
fclose($src);