如何添加www。到文本文件中的网址

时间:2014-04-28 09:52:10

标签: php regex

我有一个包含大量网址的文本文件。有些网址以www.http://开头,有些网址从零开始。

我想在文本文件中的每一行前面添加www.,其中网址不以www.http://开头。

$lines = file("sites.txt");

foreach($lines as $line) {
    if(substr($line, 0, 3) != "www" && substr($line, 0, 7) != "http://" ) {

    }
}

这就是我现在的代码。我知道它并不多,但我不知道如何在每条不匹配的行前添加www.

4 个答案:

答案 0 :(得分:3)

如果不存在,则会添加www.,如果找到的行中有http / httpS ,则会有效。

$url = preg_replace("#http(s)?://(?:www\.)?#","http\\1://www.", $url);

此正则表达式将适用于以下内容:

  

domain.ext - > http://www.domain.ext
   www.domain.ext - > http://www.domain.ext
  http://www.domain.ext - > http://www.domain.ext
   https://domain.ext - > https://www.domain.ext(注意httpS)
   https://www.domain.ext - > https://www.domain.ext(请注意httpS)


正则表达式解释说:
http(s)?:// - > http的S可能不存在,除非它是 (?:www\.)? - > www.可能不在那里。不要保存(?:),我们还是要添加它

然后我们在替换值中使用\\1以允许http ** S **在存在时保持工作。
此外,所有字符串substr功能都将在https上失败,因为它的1个字符更长。

答案 1 :(得分:2)

诀窍是通过引用传递$lines,这样你就可以改变它们:

foreach($lines as &$line) { // note the  '&'

    // http:// and www. is missing:
    if(stripos($line, 'http://www.') === false) {
        $line = 'http://www.' . $line;

    // only http:// is missing:
    } elseif(stripos($line, 'http://www.') !== false && stripos($line, 'http://') === false) {
        $line = 'http://' . $line;

    // only www. is missing:
    } elseif(stripos($line, 'http://') !== 0 && stripos($line, 'www.') !== 0)
        $line = 'http://www.' . str_replace('http://', '', $line);

    // nothing is missing:
    } else {
    }
}

注意:

简单地将www.添加到非www域可能是错误的,因为www.example.comexample.com CAN具有完全不同的内容,不同的服务器,不同的目标,不同的DNS映射。最好添加http://但不要添加www.

要将新数组写回文件,请使用:

file_put_contents(implode(PHP_EOL, $lines), 'sites.txt');

答案 2 :(得分:0)

$lines = file("/var/www/vhosts/mon.totalinternetgroup.nl/public/sites/sites.txt");
$new_lines = array();
foreach($lines as $line) {
    if(substr($line, 0, 3) != "www" || substr($line, 0, 7) != "http://" ) {
       $new_lines[] = "www.".$line;
    }else{
       $new_lines[] = $line;  
    }
}

$content = implode("\n", $new_lines);
file_put_contents("/var/www/vhosts/mon.totalinternetgroup.nl/public/sites/sites.txt", $content);

答案 3 :(得分:0)

使用这个: 只有3行!

<?
    $g0 = file_get_contents("site");
    #--------------------------------------------------
    $g1 = preg_replace("#^http://#m","",$g0);
    $g2 = preg_replace("/^www\./m","",$g1);
    $g3 = preg_replace("/^/m","http://",$g2);
    #--------------------------------------------------
    file_put_contents("site2",$g3);
?>

输入文件

1.com
www.d.som
http://ss.com
http://www.ss.com

输出文件:

http://1.com
http://d.som
http://ss.com
http://ss.com