diff --git a/ecrire/inc_filtres.php3 b/ecrire/inc_filtres.php3 index e5e92dc889de8745c1fd464083559287b8a538b6..7931aba1a4e1a2e7a794ba9da3d049c575bc9cfe 100644 --- a/ecrire/inc_filtres.php3 +++ b/ecrire/inc_filtres.php3 @@ -21,8 +21,10 @@ function entites_html($texte) { return corriger_entites_html(htmlspecialchars($texte)); } - function filtrer_entites($texte) { // html -> texte, a completer + if (lire_meta('charset') != 'iso-8859-1') + return $texte; + // NB en php4 il suffirait d'utiliser get_html_translation_table/array_flip // HTML_ENTITIES $trans = array( @@ -149,14 +151,22 @@ function strtr2 ($texte, $trans) { // // transforme une chaine en entites unicode  -function entites_unicode($chaine) { - switch(lire_meta('charset')) { +function entites_unicode($chaine, $charset='AUTO') { + if ($charset == 'AUTO') + $charset=lire_meta('charset'); + + switch($charset) { - case '': case 'iso-8859-1': - // On commente cet appel tant qu'il reste des spip < 1.5 dans la nature + // On commente cet appel tant qu'il reste des spip v<1.5 dans la nature // $chaine = iso_8859_1_to_unicode($chaine); break; + // FORCE-iso-8859-1 passe le message suivant : on VEUT la conversion, meme + // si elle est desactivee dans entites_unicode pour maintenir (temporairement) + // la lisibilite de notre backend sur des SPIP v<1.5 + case 'FORCE-iso-8859-1': + $chaine = iso_8859_1_to_unicode($chaine); + break; case 'utf-8': $chaine = utf_8_to_unicode($chaine); @@ -169,10 +179,12 @@ function entites_unicode($chaine) { } // transforme les entites unicode  dans le charset courant -function unicode2charset($chaine) { - switch(lire_meta('charset')) { +function unicode2charset($chaine, $charset='AUTO') { + if ($charset == 'AUTO') + $charset=lire_meta('charset'); + + switch($charset) { - case '': case 'iso-8859-1': $chaine = unicode_to_iso_8859_1($chaine); break; @@ -335,6 +347,8 @@ function liens_ouvrants ($texte) { // Corrige les caracteres degoutants utilises par les Windozeries function corriger_caracteres($texte) { + if (lire_meta('charset') != 'iso-8859-1') + return $texte; // 145,146,180 = simple quote ; 147,148 = double quote ; 150,151 = tiret long return strtr($texte, chr(145).chr(146).chr(180).chr(147).chr(148).chr(150).chr(151), "'''".'""--'); } @@ -349,6 +363,8 @@ function PtoBR($texte){ // Majuscules y compris accents, en HTML function majuscules($texte) { + if (lire_meta('charset') != 'iso-8859-1') + return $texte; $suite = htmlentities($texte); $suite = ereg_replace('&', '&', $suite); $suite = ereg_replace('<', '<', $suite); @@ -499,7 +515,7 @@ function affdate_base($numdate, $vue) { if ($mois > 0){ $saison = "hiver"; if (($mois == 3 AND $jour >= 21) OR $mois > 3) $saison = "printemps"; - if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = "\xe9t\xe9"; + if (($mois == 6 AND $jour >= 21) OR $mois > 6) $saison = unicode2charset("été"); if (($mois == 9 AND $jour >= 21) OR $mois > 9) $saison = "automne"; if (($mois == 12 AND $jour >= 21) OR $mois > 12) $saison = "hiver"; } diff --git a/ecrire/inc_index.php3 b/ecrire/inc_index.php3 index a21ab9d280df259ad5da6a95f56c06de3b934333..eccecb562f3bf4fe9b423f429fe6721650b17c8d 100644 --- a/ecrire/inc_index.php3 +++ b/ecrire/inc_index.php3 @@ -21,9 +21,11 @@ function nettoyer_chaine_indexation($texte) { /* u */ chr(249).chr(250).chr(251).chr(252). /* yNn */ chr(255).chr(209).chr(241); $texte = ereg_replace("<[^<]*>", "", $texte); - return strtolower(strtr($texte, - $accents, - "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")); + if (lire_meta('charset') == 'iso-8859-1') + $texte = strtolower(strtr($texte, + $accents, + "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn")); + return $texte; } // Merci a Herve Lefebvre pour son apport sur cette fonction diff --git a/ecrire/inc_sites.php3 b/ecrire/inc_sites.php3 index 39fbc7ae1ed8632c55fe0abef83a1a8bcdc4f815..aa78b0deb4650fe6958d1eeccd39979998c4db15 100644 --- a/ecrire/inc_sites.php3 +++ b/ecrire/inc_sites.php3 @@ -73,21 +73,39 @@ function recuperer_page($url) { } } - if (!$f) + if (!$f) { spip_log("ECHEC syndication $url$via_proxy"); - else { + $result = ''; + } else { while (!feof($f)) $result .= fread($f, 16384); fclose($f); - return $result; } + + // analyser cette page pour trouver un charset connu hors iso-8859-1, + // et convertir dans le charset local ; si la page n'a pas de charset, + // ne pas la decoder (on suppose qu'elle est iso-8859-1)... sauf si + // le charset local n'est pas iso-8859-1 + if (eregi("<[^>]*charset.(utf-8)", $result, $regs)) { + $charset_page = $regs[1]; + $result = unicode2charset(entites_unicode($result, $charset_page)); + } else + if (lire_meta('charset' != 'iso-8859-1')) + $result = unicode2charset(entites_unicode($result, 'FORCE-iso-8859-1')); + + // FORCE-iso-8859-1 passe le message suivant : on VEUT la conversion, meme + // si elle est desactivee dans entites_unicode pour maintenir (temporairement) + // la lisibilite de notre backend sur des SPIP v<1.5 + + + return $result; } function analyser_site($url) { include_ecrire("inc_filtres.php3"); - $texte = unicode2charset(iso_8859_1_to_unicode(recuperer_page($url))); + $texte = recuperer_page($url); if (!$texte) return false; $result = ''; if (ereg('<channel[^>]*>(.*)</channel>', $texte, $regs)) { @@ -146,7 +164,7 @@ function syndic_a_jour($now_id_syndic, $statut = 'off') { else $moderation = 'publie'; // en ligne sans validation - $le_retour = unicode2charset(iso_8859_1_to_unicode(recuperer_page($la_query))); + $le_retour = recuperer_page($la_query); if (strlen($le_retour)>10){ diff --git a/ecrire/inc_texte.php3 b/ecrire/inc_texte.php3 index aa0626e35ee3d7eaa81ec3ef11f2002678560c73..44d42cf10caafad01aab272fb468bebf923746b0 100644 --- a/ecrire/inc_texte.php3 +++ b/ecrire/inc_texte.php3 @@ -262,27 +262,25 @@ function interdire_scripts($source) { // Correction typographique francaise function typo_fr($letexte) { - global $flag_preg_replace; - global $flag_str_replace; - - // les "blancs durs" et les guillemets - if ($flag_str_replace){ - $letexte = str_replace(" ","~",strtr($letexte,chr(160),"~")); - $letexte = str_replace("»",chr(187),$letexte); - $letexte = str_replace("»", chr(187),$letexte); - $letexte = str_replace("«",chr(171),$letexte); - $letexte = str_replace("«", chr(171),$letexte); - } - else { - $letexte = ereg_replace(" ","~",strtr($letexte,chr(160),"~")); - $letexte = ereg_replace("&(raquo|#187);",chr(187), $letexte); - $letexte = ereg_replace("&(laquo|#171);",chr(171), $letexte); + + // nettoyer 160 = nbsp ; 187 = raquo ; 171 = laquo ; 176 = deg + if (lire_meta('charset') == 'iso-8859-1') { + $letexte = strtr($letexte,chr(160),"~"); + $chars = array (187,171,176); + while (list(,$c) = each($chars)) + $letexte = ereg_replace(chr($c),"&#$c;",$letexte); } + // unifier sur la representation unicode + $letexte = ereg_replace(" ","~",$letexte); + $letexte = ereg_replace("»","»",$letexte); + $letexte = ereg_replace("«","«",$letexte); + $letexte = ereg_replace("°","°",$letexte); + $cherche1 = array( /* 2 */ '/((^|[^\#0-9a-zA-Z\&])[\#0-9a-zA-Z]*)\;/', - /* 3 */ '/([:!?'.chr(187).']| -,)/', - /* 4 */ '/('.chr(171).'|(M(M?\.|mes?|r\.?)|[MnN]'.chr(176).') )/' + /* 3 */ '/([:!?]|»| -,)/', + /* 4 */ '/(«|(M(M?\.|mes?|r\.?)|[MnN]°) )/' ); $remplace1 = array( /* 2 */ '\1~;', @@ -304,6 +302,13 @@ function typo_fr($letexte) { $letexte = ereg_remplace($cherche2, $remplace2, $letexte); + // remettre le caractere simple ?? + if (lire_meta('charset') == 'iso-8859-1') { + $chars = array (187,171,176); + while (list(,$c) = each($chars)) + $letexte = ereg_replace("&#$c;",chr($c),$letexte); + } + return ($letexte); }