2013-06-17 29 views
8

Na mojej stronie użytkownicy mogą umieścić adres URL w swoim profilu. Ten kod może być http://www.google.com lub www.google.com lub google.com.Jak zmusić link HTML do absolutnego działania?

Jeśli po prostu wstawię mój kod PHP <a href="$url">$url</a>, link nie zawsze jest absolutny.

Jak wymusić oznaczenie a jako bezwzględne?

+2

Upewnij się, że zawsze jest poprzedzone prefiksem 'http: //' (lub '//' dla łącza zależnego od protokołu) –

+1

Możesz spróbować użyć window.location Ale najlepiej jest sprawdzić poprawność danych wejściowych użytkowników. Poproś ich o podanie poprawnego adresu URL. – ysrb

Odpowiedz

5

Użyj protokołu, najlepiej http: //

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

Poproś użytkowników, aby wprowadzić adres URL w tym formacie, lub złączyć http: // jeśli nie dodał.

3

Niedawno musiałem zrobić coś podobnego.

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

Zasadniczo, jeśli adres URL nie zawiera "http", dodaj go do przedniej części ciągu (prefiksu).

Albo możemy to zrobić z RegEx

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

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

Dziękuję @JamesHilton za wskazanie błędu. Dziękuję Ci!

+1

To zawsze zwróci false, ponieważ jeśli znajdzie http na początku $ url, zwróci 0, ponieważ pozycja łańcucha "http" zaczyna się od indeksu 0. 0 jest uważana za falsey w instrukcji if, więc musisz zamiast tego użyj operatora ===. –

+0

@ James Hilton Awesome jak zawstydzające! Naprawiono, dziękuję! – StephanieQ

+0

Może byłoby lepiej Regeks, jeśli użyjesz: '"/^ https?: \/{2} \ w/i "' – eddy85br

6

Jeśli przedrostek adresu URL zostanie zmieniony na //, będzie traktowany jako bezwzględny. Na przykład:

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

Należy pamiętać, że będzie korzystać z tego samego protokołu, z którego obsługiwana jest strona (np. Jeśli adres URL Twojej strony to https://path/to/page, wynikowy adres URL to https://google.com).

+0

Należy również wspomnieć, że jeśli bezwzględny URI jest określony tylko z dwóch ukośników, to protokół bieżącej strony będzie używany podczas łączenia się z adresem URL profilu, tzn. https://twojastrona.net będzie mieć https://google.com, podczas gdy http://twojastrona.net będzie skutkować http: // google.com –

+0

Tak, co pasuje do przypadku w pytaniu. Nawiasem mówiąc, twoje linki są zepsute (przetworzone). –

+0

To nie działa, jeśli protokół twojej witryny różni się od protokołu URL. Jeśli twoja strona jest https, to adres URL http nie zadziała, ponieważ zamiast tego otrzymasz https. – DeepBlue