Frage

Ich habe die Menschen ihre Website-Adresse veröffentlichen, aber Variationen gebucht werden wie zum Beispiel:

Wenn ich auf eine Adresse ohne http verlinken: // nimmt es die Verbindung als interne

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

Senden Menschen zu so etwas wie: http://mysite.com/thiersite.com

Eine weitere Option, die ich versucht habe, ist die Verknüpfung zu so etwas wie mysite.com/?link=theirsite.com - So kann ich einigen Link tun kann, Tracking etc dann wird die Menschen auf den Link zu umleiten, aber es hat das gleiche Problem:

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

Lösung

Keine Notwendigkeit, reguläre Ausdrücke verwenden hier. PHP hat URL-Validierung eingebaut.

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

Output

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

Bitte gehen Sie direkt nicht zu regulären Ausdrücken für die Validierung, PHP eine Menge von Methoden gebaut hat in diesen Szenarien zu befassen.

-Mathew

Andere Tipps

put „http: //“ im Bereich standardmäßig und bestätigen Sie die URL mit so etwas wie

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

, wenn Link überprüft nicht, nur sie eine Nachricht drucken sagen „der Link ungültig eingegeben ist, stellen Sie sicher, es beginnt mit‚http: //‘“

Bitte beachten Sie, gibt es einen Unterschied zwischen www.site.com und site.com, in der Regel beider Werke, sondern auf einigen Websites jede führt zu einem anderen Pfad (etwas schlecht definierte Website wird ohne www zum Beispiel nicht funktionieren). So können Sie nicht immer voranstellen ‚www‘ an den Eingang.

Ein weiterer Hinweis, gehe Raum vorangestellt, so dass ' http://' nicht mit zusätzlichen http:// vorangestellt wird.

Meine Javascript Regex-basierte Lösung

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

Sie können auf der Client-Größe überprüfen, dass, nur einen Code in ähnlichem Geist auf dem onSubmit Ihrer Form gebracht.

Ich würde so etwas wie folgt verwenden:

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

Eine andere Möglichkeit wäre die parse_url Funktion die angegebene URL zu analysieren, sehen, welche Teile fehlen und fügen sie sie.

Ich würde eine Validierung oder sanitären Einrichtungen zur Verfügung stellen. Verwenden Sie einen regulären Ausdruck, um zu sehen, ob http: // mit ihm beginnt. Wenn nicht, tut entweder einen Validierungsfehler werfen oder http setzen. // am Anfang

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

... oder gleichwertig, in der Sprache Ihrer Wahl.

Sie könnten reguläre Ausdrücke verwenden Eingabe zu testen

Regex exp = new Regex(
    @"http://(www\.)?([^\.]+)\.com",
    RegexOptions.IgnoreCase);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top