2013-11-18 1 views
-1

Как добавить WWW к URL-адресу, если нет www, а строка названа или https://example.com?Как добавить www, когда строка уже содержит Http

Пример:

http://ellos.dk //should be http://www.ellos.dk 

Я знаю, что это может быть довольно простым, но я не могу показаться, чтобы найти милый моющий раствор

+0

конкатенации с подстроки, str_replace(), parse_url() затем http_build_url(), есть целый ряд вариантов что-то в качестве основных, как это –

+1

Просто позвольте мне указать на то, что WWW. не * необходимо * как таковое, и URL-адрес может фактически не работать, если вы его добавите. example.com и www.example.com - это два разных домена. – deceze

+0

@deceze зависит от настройки DNS для сайта. – Pitchinnate

ответ

5

Вы можете использовать "негативный предпросмотр" в регулярном выражении:

$url = preg_replace('#^(https?)://(?!www\.)#i', '$1://www.', $url); 

Regex 101 demo

PHP код:

<?php 
    function addWWW($url) { 
     return preg_replace('#^(https?)://(?!www\.)#i', '$1://www.', $url); 
    } 

    var_dump(addWWW('http://ellos.dk')); 
    var_dump(addWWW('http://www.ellos.dk')); 
    var_dump(addWWW('https://www.ellos.dk')); 
    var_dump(addWWW('https://ellos.dk')); 
    var_dump(addWWW('HTTP://ellos.dk')); 
?> 

Что будет:

string(19) "http://www.ellos.dk" 
string(19) "http://www.ellos.dk" 
string(20) "https://www.ellos.dk" 
string(20) "https://www.ellos.dk" 
string(19) "HTTP://www.ellos.dk" 

DEMO

ОБРАТИТЕ ВНИМАНИЕ: URL, такие как http://subdomain.ellos.dk бы превратиться в http://www.subdomain.ellos.dk.

+0

'preg_replace ('/^(https?): \/\/(?! www \.) /', '$ 1: // www.', $ Url);' Может быть, лучше. –

+1

@BenFortune Смешно, что вы опубликовали это - я был в середине изменения моего кода именно так! :) – h2ooooooo

5

Если предположить, что www не никогда там:

str_replace('://', '://www.', 'http://ellos.dk'); 

Если www может быть там, вам нужно будет провести проверку, чтобы определить, нужно ли вызывать код выше. Но это приведет к помещению www на место внутри строки.

+0

Вы можете удалить протокол из своего теста, возможно, у него будут ссылки ftp. URL-адреса не могут содержать строку:: //, кроме протокола. Поэтому мы можем уменьшить его до 'str_replace (': //', ': // www.', 'Http://ellos.dk');' – OlivierH

+0

Очень хороший момент. –

3

Вы можете использовать parse_url() для достижения этой цели:

function addWWW($url) { 
    $parts = parse_url($url); 
    if (strpos($url, '://www') === FALSE) { 
     return 'http://www.'.$parts['host']; 
    } 
    return $url; 
} 

Использование:

echo addWWW('http://ellos.dk'); 
echo addWWW('http://www.ellos.dk'); 

Выход:

http://www.ellos.dk 
http://www.ellos.dk 

Demo!

+0

Использование [http_build_url()] (http://www.php.net/manual/en/function.http-build-url.php) для воссоздания будет чище –

+1

@MarkBaker: Возможно, он не присутствует на всех установках PHP, поэтому его не включил. –

+0

Действительный аргумент –

2

Чтобы добавить validati на:

function addwww($link) { 
    if(strpos($link,'://www') === false) { 
     return str_replace('://','://www',$link); 
    } 
    return $link; 
} 
Смежные вопросы