2010-02-09 16 views
1

J'ai un champ de formulaire qui comprend un mélange de HTML et de texte. Je souhaite que les utilisateurs puissent utiliser le code HTML de base et la ponctuation.Comment gérer les entrées utilisateur avec un mélange de HTML et de ponctuation?

Actuellement, je me sers mysql_real_escape_string et preg_replace pour aseptiser les données et l'insérer dans la base de données. Ma compréhension est que preg_replace est la meilleure façon de dépouiller les caractères qui ne sont pas dans une liste blanche de caractères autorisés et que mysql_real_escape_string protège de l'injection SQL.

//How I collect and sanitise the data... 
$var=mysql_real_escape_string(
preg_replace("/[^A-Za-z0-9-?!$#@()\"'.:;\\@,_ =\/<> ]/",'',$_POST['var']) 
); 

Cependant, il continue de se casser lorsque le caractère de hachage est utilisé.

Mes questions sont les suivantes:

1) Est-il un moyen plus efficace de le faire?

2) Si c'est le meilleur moyen, qu'est-ce que je fais de mal?

Les personnages que je dois permettre sont: tous les caractères alphanumériques et:

? ! @ # $% &() -. ,:; ' "<>/+ =

Merci!

Répondre

2

comme beaucoup de caractères non alphanumériques ont une signification particulière dans une expression régulière, vous devez échapper à tous. Alors

preg_replace("/[^A-Za-z0-9-?!$#@()\"'.:;\\@,_ =\/<> ]/",'',$_POST['var']) 

devient (il y a quelques-uns qui ne probablement pas besoin d'échapper, mais il ne fait pas de mal)

preg_replace("/[^A-Za-z0-9-\?\!\$\#\@\(\)\"\'\.\:\;\\@\,\_ \=\/\<\> ]/",'',$_POST['var']) 
+0

Merci! J'hésite à utiliser strip_tags si ce n'est pas fiable. – Matt

4

Pourquoi ne pas simplement utiliser strip_tags() et limiter les balises dont vous avez besoin?

strip_tags ($str,"<br>") 

Vous pouvez alors faire autre "l'assainissement" qui est pas tout à fait aussi envahissant.

+2

convient de noter que strip_tags, tout agréable quand cela fonctionne, ne sont pas fiables. http://ca.php.net/strip_tags – dnagirl