Emin http yapma bir web adresi görünür

7 Cevap php

Ben kendi web sitesi adresi gönderme insanlar var ama farklılıklar gibi nakledilir:

Ben http:// olmadan bir adrese bağlantı zaman iç gibi bağlantı alır

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

bir şey için insanları gönderme gibi: http://mysite.com/thiersite.com

?: Ben vs sonra linke yönlendirme insanlar izleme bazı linki yapabilirsiniz Bu şekilde ancak aynı sorun var - ben denedim başka seçenek mysite.com gibi bir şey bağlar / = theirsite.com bağlantı

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

7 Cevap

Burada normal ifadeler kullanmaya gerek yok. PHP yerleşik URL doğrulama vardır

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));

Çıktı

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

Doğrulama için düzenli ifadeler düz atlamak etmeyin, PHP bu senaryolarla başa çıkmak için inşa yöntemleri bir sürü vardır.

-Mathew

varsayılan alanına "http://" koymak, sonra gibi bir şey ile URL'yi doğrulamak

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

Bağlantıyı doğrulamak yoksa, sadece "emin 'http://' ile başlar yapmak, girdiğiniz bağlantı geçersiz" Onlara söyleyen bir mesajı yazdırmak

Orada www.site.com ve site.com, genellikle iki eser arasında gerçek bir fark var, ama bazı web sitesinde farklı bir yol (bazı kötü tanımlı web sitesi için her yol {olmadan çalışmaz, unutmayın [(2)]}, örneğin). Yani hep girişine 'www' Önlerine olamaz.

' http://' ek http:// ile önüne olmaz ki başka not, uzay prepending kolu yok.

Benim JavaScript Regex tabanlı bir çözüm

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

Sadece onSubmit formun benzer ruhu içinde bir kod koymak, istemci boyutu üzerinde olduğunu doğrulayın.

Ben böyle bir şey kullanmak istiyorsunuz:

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

Başka bir yol parse_url function , verilen URL ayrıştırma parçaları eksik görmek ve bunları eklemek olacaktır.

Ben bazı doğrulama veya sanitasyon sağlayacaktır. Http:// onunla başlar görmek için bir regex kullanın. Değilse, bir doğrulama hatası atmak veya başında http:// koymak ya.

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

... Veya, eşdeğer seçtiğiniz dil.

Sen girişi test normal ifadeler kullanabilirsiniz

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