2008-11-07 10 views

Répondre

11
if (stripos($url, 'http://') !== 0) { 
    $url = 'http://' . $url; 
} 
+1

Votre réponse est correcte, mais je ne peux pas le supporter quand les gens mettent les deux opérandes des opérateurs de comparaison dans cet ordre. –

+0

Je suis avec Lucas à ce sujet. Mon raisonnement est que cela n'a pas de sens si vous le lisez comme une phrase anglaise. "si zéro n'égale pas le résultat de cette fonction ..." – Lasar

+3

Il est évidemment moins lisible. Mais il y a une logique dans les langages dérivés du langage C, où l'on peut écrire accidentellement 'if (a = 0)'. 'Si (0 = a)' sera attrapé rapidement. Bien que personnellement je n'utilise pas ce style, c'est une question de goût et de normes de codage. – bobince

7

Je recommande une légère amélioration par rapport

if (0 !== stripos($url, 'http://') && 0 !== stripos($url, 'https://')) { 
    $url = 'http://' . $url; 
} 

Cependant, cela gâchera tom up liens qui utilisent d'autres protocoles (ftp: // svn: // gopher:// etc)

+0

oui, j'ai pensé à cela après avoir vu votre réponse ... –

3
if (!preg_match("/^http:\/{2}/",$url)){ 
    $url = 'http://' . $url; 
} 
2

Je vérifierais les lettres suivies d'un deux-points. Selon les spécifications de l'URI, deux points sont utilisés pour séparer le "schéma" (http, ftp etc.) de la "partie spécifique au schéma". De cette façon, si quelqu'un entre (par exemple) des liens mailto, ceux-ci sont gérés correctement.

+0

Oui, cela devrait vraiment utiliser un protocole regex (pour permettre les ports ainsi que http et https). –