diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index d6b57c9c153f5bef5ad35755d337002045aa6221..dbaad0ba9402ae043792944e849dfaa27261d5d5 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -47,6 +47,13 @@ function entites_unicode($texte) {
 	return charset2unicode($texte);
 }
 
+// caracteres de controle - http://www.w3.org/TR/REC-xml/#charsets
+function supprimer_caracteres_illegaux($texte) {
+	$from = "\x0\x1\x2\x3\x4\x5\x6\x7\x8\xB\xC\xE\xF\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F";
+	$to = str_repeat('-', strlen($from));
+	return strtr($texte, $from, $to);
+}
+
 // Nettoyer les backend
 function texte_backend($texte) {
 
@@ -163,6 +170,9 @@ function corriger_caracteres($texte) {
 			chr(194).chr(133) => '...'
 		);
 	}
+
+	$texte = supprimer_caracteres_illegaux($texte);
+
 	$charset = lire_meta('charset');
 	if (!$trans[$charset]) return $texte;
 	return strtr($texte, $trans[$charset]);