我有一个包含大量网址的文本文件。有些网址以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.
。
答案 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.com
和example.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