2011-11-01 1 views
1

Je souhaite arrêter complètement toutes les adresses IP et sous-domaines. Quelqu'un l'édite/le modifie pour qu'il n'ajoute pas d'IP et de sous-domaines dans la base de données. Je veux seulement principal (Top-Leven Domain) dans ma base de données. Voici le modèle que j'utilise:Arrêt des adresses IP et des sous-domaines, seuls les domaines sont autorisés

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)[email protected])?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/'; 

if (preg_match($pattern, $url)) { 
header("Location: good.php"); 
} else { 
header("Location: bad.php"); 
die(); 
} 
+0

Alors, quel est ce modèle correspondant en ce moment? – Nathan

Répondre

2

Un domaine de premier niveau ne contient que des lettres. Voici a list of TLDs. Je suppose que vous vouliez dire «domaines de deuxième niveau», mais même cela vous donnera des problèmes. Par exemple, .co.uk est un SLD très populaire, mais il n'est pas utilisé pour un site Web ou quoi que ce soit. Les domaines que vous mentionnez sont au troisième niveau, en dessous de ce SLD. (anycompanywebsite.co.uk). Donc, ce que je dis, c'est que vous ne pouvez pas le faire en utilisant une simple expression régulière. Vous devrez avoir une liste des deuxième, troisième et même quatrième niveaux qui sont utilisés comme s'il s'agissait d'un TLD.

+0

oh, donc .co.uk et d'autres domaines seront également bloqués :(alors quelle est la meilleure solution/code ou ai-je besoin d'utiliser la fonction Parse_url à la place de ce modèle? –

+0

Eh bien, cela dépend de l'objectif.Les sous-domaines peuvent être très différents Ils peuvent pointer vers d'autres adresses IP, par exemple, vous devriez donc vous demander si vous ne les voulez pas vraiment dans votre base de données.Si c'est effectivement le cas, vous aurez besoin d'une liste complète de TLDs à vérifier. Il suffit de vérifier que la valeur entrée n'est pas une adresse IP Notez que les domaines peuvent aussi être des nombres, en fonction du TLD Seul le TLD lui-même est toujours du texte (pour l'instant) – GolezTrol

+0

Par domaines étant un nombre, je voulais dire le domaine de second niveau, par exemple http://9292.nl – GolezTrol

Questions connexes