diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3
index be7cdc5ef34cdc432f9d82c4d659ef58638f865a..ea9ec860abf177bf5c343ecc5b80d6911b64cc0f 100644
--- a/ecrire/inc_texte.php3
+++ b/ecrire/inc_texte.php3
@@ -427,14 +427,16 @@ function typo_fr($letexte) {
 	$cherche1 = array(
 		/* 1		'/{([^}]+)}/',  */
 		/* 2 */ 	'/((^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/',
-		/* 3 */		'/»|[!?]| -,|:([^0-9]|$)/',
-		/* 4 */		'/«|(M(M?\.|mes?|r\.?)|[MnN]°) /'
+		/* 3 */		'/»| -,|:([^0-9]|$)/',
+		/* 4 */		'/([^<!?])([!?])/',
+		/* 5 */		'/&#171;|(M(M?\.|mes?|r\.?)|[MnN]&#176;) /'
 	);
 	$remplace1 = array(
 		/* 1		'<i class="spip">\1</i>', */
 		/* 2 */		'\1~;',
 		/* 3 */		'~\0',
-		/* 4 */		'\0~'
+		/* 4 */		'\1~\2',
+		/* 5 */		'\0~'
 	);
 	$letexte = ereg_remplace($cherche1, $remplace1, $letexte);
 	$letexte = ereg_replace(" *~+ *", "~", $letexte);