2010-05-28 4 views
1

Je suis assez nouveau pour les expressions régulières et MAN me donne-t-il mal à la tête? Ils sont si intimidants! Pour une campagne par e-mail que je suis en train de faire, un utilisateur cliquera sur un lien de l'e-mail avec quelques paramètres d'URL remplis pour eux, afin de faciliter le remplissage d'un formulaire. Je veux empêcher les hacks d'injection ou quoi que ce soit d'appeler, mais je dois autoriser les paramètres $ _GET à être alphanumériques, avoir des signes de ponctuation et avoir des espaces. Si quelqu'un a une bonne méthode pour cela, je vous en serais reconnaissant, mais en ce moment je:Autoriser les caractères alphanumériques, la ponctuation et les espaces

foreach($_GET as $m=>$n) { 
    $get[$m] = preg_replace('(^[a-z0-9 \-\_\.]+)i',' ',$n); 
} 

Je voudrais être en mesure de remplacer tous les caractères ne se trouve pas avec cette expression régulière, que je crois que je l'utilise ?!, mais je ne peux pas le faire fonctionner non plus. Toute aide pour que cela fonctionne serait appréciée!

Répondre

0

Il vous manque délimiteurs et vous devez mettre le + hors du support de fin ]

foreach($_GET as $m=>$n) { 
    $get[$m] = preg_replace("/[^a-zA-Z0-9 \-\_\.]+/"," ",$n); 
} 

Ou:

foreach($_GET as $m=>$n) { 
    $get[$m] = preg_replace("#[^a-zA-Z0-9 \-\_\.]+#"," ",$n); 
} 
+0

Merci, je vais mettre des délimiteurs, mais je dois encore comprendre comment autoriser les alphanumériques, la ponctuation et les espaces. – bccarlso

+0

Cela fonctionne réellement pour la plupart, j'ai juste besoin de deviner manuellement quels caractères seront utilisés dans les données $ _GET et j'espère ne rien manquer. Merci! – bccarlso

0

Le caractère ^ porte la marque à entre crochets. Donc, votre code devrait être:

$get[$m] = preg_replace('([^a-z0-9 \-\_\.]+)i',' ',$n); 
+0

Merci pour la pointe de la syntaxe , mais cela n'atteint toujours pas ce que j'espère comprendre. – bccarlso

Questions connexes