2013-06-17 10 views
8

Auf meiner Website können Benutzer eine URL in ihr Profil einfügen. Diese Adresse kann http://www.google.com oder www.google.com oder google.com sein.Wie erzwinge ich einen HTML-Link als absolut?

Wenn ich nur in meinem PHP-Code <a href="$url">$url</a> einfügen, ist die Verbindung nicht immer absolut.

Wie kann ich das a Tag absolut zwingen?

+2

Stellen Sie sicher, dass immer 'http: //' (oder '//' für eine protokollrelative Verbindung) vorangestellt ist –

+1

Sie können versuchen, window.location zu verwenden Aber das Beste ist, die Benutzereingaben zu validieren. Fordern Sie sie auf, eine gültige URL anzugeben. – ysrb

Antwort

5

ein Protokoll verwenden, vorzugsweise http: //

<a href="http://www.google.com">Google</a> 

Benutzer fragen URL in diesem Format eingeben oder http verketten: // wenn nicht hinzugefügt.

3

Ich musste vor kurzem etwas ähnliches tun.

if (strpos($url, 'http') === false) { 
    $url = 'http://' .$url; 
} 

Wenn die URL nicht "http" enthält, fügen Sie sie an der Vorderseite der Zeichenfolge (Präfix) hinzu.

Oder wir können dies mit RegEx

$http_pattern = "/^http[s]*:\/\/[\w]+/i"; 

if (!preg_match($http_pattern, $url, $match)){ 
    $url = 'http://' .$url; 
} 

Vielen Dank an @JamesHilton für einen Fehler hinzuweisen. Vielen Dank!

+1

Dies wird immer false zurückgeben, da, wenn es http am Anfang von $ url findet, es eine 0 zurückgibt, weil die Position der Zeichenfolge 'http' bei Index 0 beginnt. 0 wird in der if-Anweisung als falsch betrachtet Verwenden Sie stattdessen den Operator===. –

+0

@JamesHilton Aw jeez wie peinlich! Fest, danke! – StephanieQ

+0

Vielleicht wäre es eine bessere RegExp, wenn Sie verwenden: '"/^ https?: \/{2} \ w/i "' – eddy85br

6

Wenn Sie der URL // voranstellen, wird diese als absolute Adresse behandelt. Zum Beispiel:

<a href="//google.com">Google</a>.

Beachten Sie, dass dies das gleiche Protokoll verwendet, mit dem die Seite geliefert wird (z. B. wenn die URL Ihrer Seite https://path/to/page ist, wird die resultierende URL https://google.com sein).

+0

Sie sollten auch erwähnen, dass, wenn der absolute URI nur mit den zwei Schrägstrichen angegeben ist Das Protokoll der aktuellen Site wird verwendet, wenn eine Verbindung zur Profil-URL hergestellt wird, dh https://yoursite.net führt zu https://google.com, während http://yoursite.net zu http: // führt. google.com –

+0

Ja, was dem Fall in der Frage entspricht. Übrigens sind deine Links kaputt (geparst). –

+0

Dies funktioniert nicht, wenn sich Ihr Website-Protokoll vom URL-Protokoll unterscheidet. Wenn Ihre Website https ist, funktioniert http url nicht, da stattdessen https angegeben wird. – DeepBlue