diff --git a/ecrire/inc_articles.php b/ecrire/inc_articles.php
index 4c1ef9801f98a2c654ef9b97784db001c2663a2d..6da9af2f038169ab994436fb80d8830fb41ffe18 100644
--- a/ecrire/inc_articles.php
+++ b/ecrire/inc_articles.php
@@ -427,7 +427,7 @@ function boites_de_config_articles($id_article, $id_rubrique, $flag_editable,
 
 		echo "<P>"._T('texte_descriptif_petition')."&nbsp;:<BR>";
 		echo "<TEXTAREA NAME='texte_petition' CLASS='forml' ROWS='4' COLS='10' wrap=soft>";
-		echo $texte_petition;
+		echo entites_html($texte_petition);
 		echo "</TEXTAREA><P>\n";
 
 		echo "<P align='$spip_lang_right'>";
diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3
index ef29d0814a8c2a984096e43ed5ebc035735575f7..d622ce4b99c3d8c7609654c1bc1ae2172c03c9f8 100644
--- a/ecrire/inc_filtres.php3
+++ b/ecrire/inc_filtres.php3
@@ -16,8 +16,12 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Echappement des entites HTML avec correction des entites "brutes"
 // (generees par les butineurs lorsqu'on rentre des caracteres n'appartenant
 // pas au charset de la page [iso-8859-1 par defaut])
+//
+// Attention on limite cette correction aux caracteres "hauts" (en fait > 99
+// pour aller plus vite que le > 127 qui serait logique), de maniere a
+// preserver des echappements de caracteres "bas" (par exemple [ ou ")
 function corriger_entites_html($texte) {
-	return preg_replace(',&amp;(#[0-9]+;),i', '&\1', $texte);
+	return preg_replace(',&amp;(#[0-9][0-9][0-9]+;),i', '&\1', $texte);
 }
 // idem mais corriger aussi les &amp;eacute; en &eacute;
 function corriger_toutes_entites_html($texte) {
diff --git a/ecrire/inc_forum_envoi.php b/ecrire/inc_forum_envoi.php
index 1046501b4c4f7b3f4713753105c0b1e03099ac65..8d384bb125ff65434838d416b03ea11ccaaa4a81 100644
--- a/ecrire/inc_forum_envoi.php
+++ b/ecrire/inc_forum_envoi.php
@@ -62,13 +62,13 @@ if ($valider_forum AND ($statut!='')) {
 	(titre, texte, date_heure, nom_site, url_site, statut, id_auteur,
 	auteur, email_auteur, id_rubrique, id_parent, id_article, id_breve,
 	id_message, id_syndic)
-	VALUES ('".texte_script($titre_message)."',
-	'".texte_script($texte)."', NOW(),
-	'".texte_script($nom_site)."',
-	'".texte_script($url_site)."',
-	'".texte_script($statut)."',
+	VALUES ('".addslashes($titre_message)."',
+	'".addslashes($texte)."', NOW(),
+	'".addslashes($nom_site)."',
+	'".addslashes($url_site)."',
+	'".addslashes($statut)."',
 	$connect_id_auteur,
-	'".texte_script($nom)."',
+	'".addslashes($nom)."',
 	'$connect_email',
 	'$id_rubrique', '$id_parent', '$id_article', '$id_breve',
 	'$id_message', '$id_syndic')";
diff --git a/ecrire/inc_mots_type.php b/ecrire/inc_mots_type.php
index 72a404c16018dd8a481e9d7d53b9fe30463d06a0..7203d07fce035ae681fe9a62327e706d883bf260 100644
--- a/ecrire/inc_mots_type.php
+++ b/ecrire/inc_mots_type.php
@@ -96,7 +96,7 @@ if ($connect_statut =="0minirezo"){
 	if ($options == 'avancees' OR $descriptif) {
 		echo "<B>"._T('texte_descriptif_rapide')."</B><BR>";
 		echo "<TEXTAREA NAME='descriptif' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
-		echo $descriptif;
+		echo entites_html($descriptif);
 		echo "</TEXTAREA><P>\n";
 	}
 	else
@@ -105,7 +105,7 @@ if ($connect_statut =="0minirezo"){
 	if ($options == 'avancees' OR $texte) {
 		echo "<B>"._T('info_texte_explicatif')."</B><BR>";
 		echo "<TEXTAREA NAME='texte' ROWS='8' CLASS='forml' COLS='40' wrap=soft>";
-		echo $texte;
+		echo entites_html($texte);
 		echo "</TEXTAREA><P>\n";
 	}
 	else
diff --git a/ecrire/inc_rubriques_edit.php b/ecrire/inc_rubriques_edit.php
index 5ab2466e7699a746ad0b860154f29f94995ac11e..69a77b707b46069dbb23b9762492bec856470d2e 100644
--- a/ecrire/inc_rubriques_edit.php
+++ b/ecrire/inc_rubriques_edit.php
@@ -147,7 +147,7 @@ if ($options == "avancees" OR $descriptif) {
 	echo "<B>"._T('texte_descriptif_rapide')."</B><BR>";
 	echo _T('entree_contenu_rubrique')."<BR>";
 	echo "<TEXTAREA NAME='descriptif' CLASS='forml' ROWS='4' COLS='40' wrap=soft>";
-	echo $descriptif;
+	echo entites_html($descriptif);
 	echo "</TEXTAREA><P>\n";
 }
 else {
@@ -157,7 +157,7 @@ else {
 echo "<B>"._T('info_texte_explicatif')."</B>";
 echo aide ("raccourcis");
 echo "<BR><TEXTAREA NAME='texte' ROWS='15' CLASS='formo' COLS='40' wrap=soft>";
-echo $texte;
+echo entites_html($texte);
 echo "</TEXTAREA>\n";
 
 	if ($champs_extra) {
diff --git a/ecrire/inc_sites_edit.php b/ecrire/inc_sites_edit.php
index fda06a001aa14d7d2ace91ec0d6a5d69f24f26b8..bac8e275f83ca63ba5f68ee68c60e0912ae2b59d 100644
--- a/ecrire/inc_sites_edit.php
+++ b/ecrire/inc_sites_edit.php
@@ -132,7 +132,7 @@ echo "<input type='text' class='formo' name='url_site' value=\"$url_site\" size=
 
 echo "<p /><b>"._T('entree_description_site')."</b><br>";
 echo "<textarea name='descriptif' rows='8' class='forml' cols='40' wrap=soft>";
-echo $descriptif;
+echo entites_html($descriptif);
 echo "</textarea>\n";
 
 $activer_syndic = $GLOBALS['meta']["activer_syndic"];
diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index 343bcb41fb6b2cf34c59b974716df48409f0907a..c8e5db35abc73fb106b157fb6668e71651379e49 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -59,7 +59,7 @@ if (!tester_variable('puce', "<img class='spip_puce' src='puce.gif' alt='-' />&n
 // XHTML - Preserver les balises-bloc
 define('_BALISES_BLOCS',
 	'div|pre|ul|li|blockquote|h[1-5r]|'
-	.'t(able|[rdh]|body|foot)|'
+	.'t(able|[rdh]|body|foot|extarea)|'
 	.'form|object|center|marquee|address|'
 	.'d[ltd]|script|noscript|map|del|ins|button|fieldset');
 
@@ -84,8 +84,8 @@ function code_echappement($rempl, $source='') {
 	// Convertir en base64
 	$base64 = base64_encode($rempl);
 
-	// Ajouter le span/div d'echappement
-	$mode = preg_match(',<('._BALISES_BLOCS.')[>[:space:]]>,', $rempl) ?
+	// Tester si on echappe en span ou en div
+	$mode = preg_match(',</?('._BALISES_BLOCS.')[>[:space:]],i', $rempl) ?
 		'div' : 'span';
 	$nn = ($mode == 'div') ? "\n\n" : '';
 
@@ -152,7 +152,6 @@ function echappe_html($letexte, $source='', $no_transform=false) {
 				."class='spip_cadre' dir='ltr'>"
 				.$echap
 				."</textarea></div></form>";
-				$mode = "div";
 				break;
 
 		}
diff --git a/formulaires/inc-formulaire_forum.php3 b/formulaires/inc-formulaire_forum.php3
index f78dc39299a8b91566739cc984f64ca36c9b9582..48e57ee001f55f10a6b9e8541390bd7c55b424fb 100644
--- a/formulaires/inc-formulaire_forum.php3
+++ b/formulaires/inc-formulaire_forum.php3
@@ -272,10 +272,11 @@ function balise_FORMULAIRE_FORUM_dyn($titre, $table, $forums_publics, $id_rubriq
 }
 
 
-function barre_forum($texte)
-{
+function barre_forum($texte) {
 	include_ecrire('inc_layer');
 
+	$texte = entites_html($texte);
+
 	if (!$GLOBALS['browser_barre'])
 		return "<textarea name='texte' rows='12' class='forml' cols='40'>$texte</textarea>";
 	static $num_formulaire = 0;