PHP et les calculs
Par Christophe, mardi 7 février 2006 à 10:51 :: Développement :: #2 :: rss
Pour le fun, je voulais mettre un plugin de calcul mathématique à mihiro (mon bot IRC, basé sur Botan), et j'étais naturellement confronté au souci de sécurité, étant donné que le calcul se fait par simple eval("\$resultat = ($calc);");... et pouf :
$calcul_presque_propre = preg_replace("/[^0-9+-\/*]/","",$texte);
Ceci supprime donc tout ce qui n'est pas chiffre, +, -, * ou /.
Mais quelle ne fut pas ma surprise de tenir une telle conversation (alors que tout le monde sait bien que 0318894273>0312547955) :
< Christophe971> !>0318894273-0312547955
< mihiro> 0318894273-0312547955 => -103758
...avant de découvrir que :
< Christophe971> !>42
< mihiro> 42 => 42
< Christophe971> !>042
< mihiro> 042 => 34
... et me voilà confronté à la terrible vérité : PHP traite tous les nombres commençant par zéro en base octale.
Et plutôt que de s'amuser à preg_match_all et à base_converter tout ce qu'il nous plait pas, un simple preg_replace répare ce terrible mal :
$calc = preg_replace("/([+-\/*]*)([0]+)([0-9]+)/","\\1\\3",$calcul_presque_propre);
Et voilà.

Commentaires
1. Le mardi 7 février 2006 à 16:16, par Matt.Rixx
2. Le samedi 11 février 2006 à 02:34, par anonymous
3. Le samedi 11 février 2006 à 03:26, par Christophe
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.