2009-04-29 1 views
1

Я человек проводки свой адрес веб-сайта, но вариации размещены такие как:Убедившись HTTP появляется в веб-адрес

Когда я ссылаюсь на адрес без http: // он берет ссылку как внутреннюю

<a href="theirsite.com">their site</a> 

посылая человек на что-то вроде: http://mysite.com/thiersite.com

Другого варианта я попытался это ссылка на что-то вроде mysite.com/?link=theirsite.com - Таким образом, я могу сделать некоторые ссылки отслеживания и т.д., то перенаправить людей на ссылку, но у нее есть та же проблема:

//do some tracking etc here 
$link =$_GET['link']; 
header("Location: $link"); 
+0

Сообщите нам, на каком языке вы используете, и мы сможем помочь вам с кодом. –

+0

Я полагаю, это PHP. – Gumbo

+0

Это так помечено в стиле PHP. Не нужно помечать этот вопрос как http. Это оскорбительно. –

ответ

8

Здесь нет необходимости использовать регулярные выражения. PHP имеет встроенную проверку URL.

Filter Var

var_dump((bool) filter_var('http://www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); 
var_dump((bool) filter_var('http://website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); 
var_dump((bool) filter_var('www.website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); 
var_dump((bool) filter_var('website.com', FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED)); 

Выход

bool(true) 
bool(true) 
bool(false) 
bool(false) 

Пожалуйста, не прыгать прямо на регулярные выражения для проверки, PHP имеет много методов, построенные в дело с этими сценариями.

-Mathew

+0

Но регулярные выражения не зависят от языка. – Gumbo

+2

Чтобы быть справедливым, он разместил его с тегом PHP, и я дал ему ответ PHP. Это не проблема. –

+0

+1 для PHP-решения вместо регулярного выражения. – diggersworld

0

Я бы предоставил некоторые валидации или санитарию. Используйте регулярное выражение, чтобы узнать, начинается ли с ним http: //. Если это не так, либо выбросите ошибку проверки, либо поместите http: // в начале.

0
if not "://" in users_url: 
    users_url = "http://" + users_url 

... или эквивалент, на выбранном вами языке.

0

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

Regex exp = new Regex(
    @"http://(www\.)?([^\.]+)\.com", 
    RegexOptions.IgnoreCase); 
+0

Надеюсь, что .com - это всего лишь пример: D – OregonGhost

2

пут «HTTP: //» в поле по умолчанию, а затем проверить URL с чем-то вроде

if(eregi("^((http|https)://)?([[:alnum:]-])+(\.)([[:alnum:]]){2,4}([[:alnum:]/+=%&_.~?-]*)$", stripslashes(trim($_POST['link'])))){ 
    //link is valid 
} 

если ссылка не подтвердите, просто напечатайте им сообщение о том, что «введенная вами ссылка недействительна, убедитесь, что она начинается с« http: // »«

+0

Мне нравится, как это также позаботится о случаях, когда люди пишут «нет» или «еще не» или что-то в этом роде. –

+0

+1 Значение по умолчанию для поля URL. Но я бы не использовал 'eregi'. – Gumbo

+0

хорошая точка с людьми, проводящими «нет» или «еще не» ... –

2

Я бы использовал примерно следующее:

$link = str_replace(array("\r", "\n"), '', trim($link)); 
if (!preg_match('/^https?:\/\//', $link)) { 
    $link = 'http://'.$link; 
} 
header('Location: '.$link); 

Другой способ: parse_url function проанализировать данный URL-адрес, узнать, какие части отсутствуют и добавить их.

+0

, возможно, потребуется рассмотреть конечное пространство, как отметил Элазар, а также было небольшое опечатку. Приветствия. –

+0

Вы заметили 'trim'? – Gumbo

+0

упс, глупый! –

2

Пожалуйста, обратите внимание, что существует реальная разница между www.site.com и site.com, как правило, как работает, но на каком-то сайте каждый ведет к другому пути (некоторые плохо определены веб-сайт не будет работать без www, например). Поэтому вы не всегда можете добавить «www» к вводу.

Другое примечание: обрабатывайте пространство для предварительного заполнения, так что ' http://' не будет добавлено дополнительно http://.

на основе My Javascript Regex решение

'http://'+field.replace(/^ *http:\/\//,'') 

Вы можете проверить, что на размер клиента, просто поставить код в том же духе на onSubmit вашей формы.

Смежные вопросы