2009-04-29 6 views
1

J'ai eu des gens affichant leur adresse de site Web, mais les variations sont affichées telles que:Faire en sorte que http apparaît dans une adresse Web

Lorsque je lier à une adresse sans http: // il prend le lien comme interne

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

envoyer les gens à quelque chose comme: http://mysite.com/thiersite.com

Une autre option que j'ai essayé est un lien vers quelque chose comme mysite.com/?link=theirsite.com - De cette façon, je peux faire un lien de suivi, etc., puis rediriger les gens vers le lien, mais il a le même problème:

//do some tracking etc here 
$link =$_GET['link']; 
header("Location: $link"); 
+0

Dites-nous quelle langue votre utilisation, et nous pouvons vous aider avec le code. –

+0

Je suppose que c'est PHP. – Gumbo

+0

Ceci est étiqueté de manière PHP. Il n'est pas nécessaire de marquer cette question comme http. C'est abusif. –

Répondre

8

Pas besoin d'utiliser des expressions régulières ici. PHP a une validation d'URL intégrée.

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

Sortie

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

S'il vous plaît ne pas sauter directement à des expressions régulières pour la validation, PHP a beaucoup de méthodes intégrées pour faire face à ces scénarios.

-Mathew

+0

Mais les expressions régulières sont indépendantes du langage. – Gumbo

+2

Pour être juste, il l'a posté avec un tag PHP et je lui ai donné une réponse PHP. C'est un non-problème. –

+0

+1 pour la solution PHP au lieu de regex. – diggersworld

0

Je voudrais fournir une validation ou d'assainissement. Utilisez une regex pour voir si http: // commence avec. Si ce n'est pas le cas, lancez une erreur de validation ou placez http: // au début.

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

... ou équivalent, dans la langue de votre choix.

0

Vous pouvez utiliser des expressions régulières pour tester l'entrée

Regex exp = new Regex(
    @"http://(www\.)?([^\.]+)\.com", 
    RegexOptions.IgnoreCase); 
+0

Espérons que le .com est juste un exemple: D – OregonGhost

2

mis "http: //" dans le champ par défaut, puis validez l'URL avec quelque chose comme

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

si le lien ne fonctionne pas valider, il suffit de leur imprimer un message disant "le lien que vous avez entré est invalide, assurez-vous qu'il commence par 'http: //'"

+0

J'aime comment cela va également prendre en charge les cas où les gens écrivent "non" ou "pas encore" ou des choses comme ça. –

+0

+1 Pour la valeur par défaut du champ URL. Mais je n'utiliserais pas 'eregi'. – Gumbo

+0

bon point avec les gens affichant "non" ou "pas encore" ... –

2

Je voudrais utiliser quelque chose comme ceci:

Une autre façon serait le parse_url function pour analyser l'URL donnée, voir quelles parties sont manquantes et les ajouter.

+0

pourrait avoir besoin de considérer l'espace de fuite comme indiqué par Elazar et aussi il y avait une petite faute de frappe. À votre santé. –

+0

Avez-vous remarqué le «trim»? – Gumbo

+0

oups, idiot moi! –

2

S'il vous plaît noter, il y a une réelle différence entre www.site.com et site.com, généralement les deux œuvres, mais sur un certain site Web chaque conduit à un chemin différent (un certain site Web mal défini ne fonctionnera pas sans l'www par exemple). Donc, vous ne pouvez pas toujours ajouter "www" à l'entrée.

Une autre note, ne gère pas l'espace ajouté au début, de sorte que ' http://' ne serait pas ajouté avec http:// supplémentaire.

Mon Javascript solution Regex

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

Vous pouvez vérifier que la taille du client, il suffit de mettre un code dans le même esprit sur la onSubmit de votre formulaire.

Questions connexes