diff --git a/ecrire/public/criteres.php b/ecrire/public/criteres.php
index 94017f2b540fadfe0459c6c235600436a56340d8..ac479fe480019fa2f2a0ca73fcb4c9e77d272725 100644
--- a/ecrire/public/criteres.php
+++ b/ecrire/public/criteres.php
@@ -459,7 +459,7 @@ function calculer_criteres ($idb, &$boucles) {
 
 function calculer_critere_DEFAUT($idb, &$boucles, $crit)
 {
-	list($fct, $col, $op, $val, $table) =
+	list($fct, $col, $op, $val, $table, $args_sql) =
 	  calculer_critere_infixe($idb, $boucles, $crit);
 
 	// ajout pour le cas special d'une condition sur le champ statut:
@@ -485,7 +485,7 @@ function calculer_critere_DEFAUT($idb, &$boucles, $crit)
 	} else $ct = $col;
 
 	// inserer la fonction SQL
-	if ($fct) $ct = "$fct($ct)";
+	if ($fct) $ct = "$fct($ct$args_sql)";
 
 	// inserer la negation (cf !...)
 	if (strtoupper($op) == 'IN') {
@@ -524,7 +524,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 	$type = $boucle->type_requete;
 	$col_table = $boucle->id_table;
 
-	list($fct, $col, $op, $val) =
+	list($fct, $col, $op, $val, $args_sql) =
 	  calculer_critere_infixe_ops($idb, $boucles, $crit);
 
 	// Cas particulier : id_enfant => utiliser la colonne id_objet
@@ -565,7 +565,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
 	  } // else: champ dans la table, c'est ok.
 	}
 
-	return array($fct, $col, $op, $val, $col_table);
+	return array($fct, $col, $op, $val, $col_table, $args_sql);
 }
 
 // deduction automatique des jointures 
@@ -740,14 +740,16 @@ function calculer_critere_infixe_ops($idb, &$boucles, $crit)
 	    }
 	}
 
-	$fct = '';
+	$fct = $args = '';
 	// fonction SQL ?
-	if (ereg("([A-Za-z_]+)\(([^)]+)\)", $col,$match3)) {
-	  $col = $match3[2];
-	  $fct = $match3[1];
+	if (preg_match('/^(.*)' . SQL_ARGS . '$/', $col, $m)) {
+	  $fct = $m[1];
+	  preg_match('/^\(([^,]*)(.*)\)$/', $m[2], $a);
+	  $col = $a[1];
+	  $args_sql = $a[2];
 	}
 
-	return array($fct, $col, $op, $val);
+	return array($fct, $col, $op, $val, $args_sql);
 }
 
 // compatibilite ancienne version
diff --git a/ecrire/public/phraser-html.php b/ecrire/public/phraser-html.php
index 58d9f1cddec9fba87e8ac28636fa0293f2b36295..a485ea2dcc07a63f353a95433bb87d0a01f75da1 100644
--- a/ecrire/public/phraser-html.php
+++ b/ecrire/public/phraser-html.php
@@ -33,7 +33,8 @@ define('CHAMP_ETENDU', '\[([^]\[]*)\(' . NOM_DE_CHAMP . '([^[)]*\)[^]\[]*)\]');
 
 define('BALISE_INCLURE','<INCLU[DR]E[[:space:]]*(\(([^)]*)\))?');
 
-define('CHAMP_SQL_PLUS_FONC', '`?([A-Za-z_][A-Za-z_0-9]*)\(?([A-Za-z_.]*)\)?`?');
+define('SQL_ARGS', '(\([^)]*\))');
+define('CHAMP_SQL_PLUS_FONC', '`?([A-Za-z_][A-Za-z_0-9]*)' . SQL_ARGS . '?`?');
 
 function phraser_inclure($texte, $ligne, $result) {