2010-12-11 19 views
18

Jestem pewien, że jest to proste rozwiązanie, po prostu nie znalazłem dokładnie tego, czego potrzebowałem.Sprawdź, czy zmienna zaczyna się od "http"

Używając php, mam zmienną źródło $. Chcę sprawdzić, czy źródło $ zaczyna się od "http".

if ($source starts with 'http') { 
$source = "<a href='$source'>$source</a>"; 
} 

Dzięki!

Odpowiedz

43
if (strpos($source, 'http') === 0) { 
    $source = "<a href=\"$source\">$source</a>"; 
} 

Uwaga używam ===, nie == ponieważ strpos Zwraca Boolean false jeśli ciąg nie zawiera mecz. Zero to falsey w PHP, więc konieczne jest ścisłe sprawdzenie równości, aby usunąć niejasności.

referencyjny:

http://php.net/strpos

http://php.net/operators.comparison

+3

można mylić stogu siana z igłą. – Ben

+0

@Ben: nice catch, thanks. – Jonah

+0

Pracował jak urok. Wielkie dzięki za szybką odpowiedź :) I dodatkowe linki do przeczytania o strpos – Andelas

12

Chcesz funkcję substr().

if(substr($source, 0, 4) == "http") { 
    $source = "<a href='$source'>$source</a>"; 
} 
+0

Ups, musi mieć "0, 4", a nie "4". '4' dostałby wszystko _, ale http :) – Jonah

+0

@Jonah: Edytowałem to podczas pisania komentarza. ["Cholera! Zawsze to robię, zawsze mylę trochę przyziemnych szczegółów". - Michael Bolton] (http://www.imdb.com/title/tt0151804/) – AgentConundrum

+0

Powinieneś go przetestować, wierzę, że pobierze cały ciąg * z * pozycji 4 –

5
if(strpos($source, 'http') === 0) 
    //Do stuff 
+0

Prawdopodobnie najbardziej elegancki sposób na sprawdzenie, czy ciąg zaczyna się od jakiegoś podłańcucha w PHP. – Robert

+0

Lolwut? Naprawdę pytasz dlaczego i stwierdzasz, że 'strpos' (co właśnie powiedziałem, że jest najbardziej elegancki) jest bardziej jasne? – Robert

+0

@Robert: Oh, hehe, źle przeczytałem. Myślałem, że mówisz, że rozwiązanie "substr" jest lepsze. Mój błąd :) – Jonah

Powiązane problemy