function onelettrebis($chaine) { $chaine=sansle($chaine); $chaine=filtrer_entites($chaine); // si il y a des fois des accents en dur qui trainent $chaine = unicode2charset(utf_8_to_unicode($chaine), 'iso-8859-1'); // on code en html ISO $a = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"; $b = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"; $chaine=strtr($chaine, $a, $b); // on retire les accents $chaine=strtoupper($chaine); // on passe en majuscules /// si débute par le fameux Œ ou œ $pattern = "^(Œ|œ)"; if (eregi($pattern,$chaine,$regs)) $chaine='O';//$chaine= $regs[0]; //on va renvoyer la lettre O else $chaine = $chaine{0}; return $chaine ; }
function install_etape_3b_dist() { $login = _request('login'); $email = _request('email'); $nom = _request('nom'); $pass = _request('pass'); $pass_verif = _request('pass_verif'); $server_db = defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : _request('server_db'); if (!defined('_PASS_LONGUEUR_MINI')) { define('_PASS_LONGUEUR_MINI', 6); } if (!defined('_LOGIN_TROP_COURT')) { define('_LOGIN_TROP_COURT', 4); } if ($login) { $echec = $pass != $pass_verif ? _T('info_passes_identiques') : (strlen($pass) < _PASS_LONGUEUR_MINI ? _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) : (strlen($login) < _LOGIN_TROP_COURT ? _T('info_login_trop_court') : '')); include_spip('inc/filtres'); if (!$echec and $email and !email_valide($email)) { $echec = _T('form_email_non_valide'); } if ($echec) { echo minipres('AUTO', info_progression_etape(3, 'etape_', 'install/', true) . "<div class='error'><h3>{$echec}</h3>\n" . "<p>" . _T('avis_connexion_echec_2') . "</p>" . "</div>"); exit; } } if (@file_exists(_FILE_CHMOD_TMP)) { include _FILE_CHMOD_TMP; } else { redirige_url_ecrire('install'); } if (!@file_exists(_FILE_CONNECT_TMP)) { redirige_url_ecrire('install'); } # maintenant on connait le vrai charset du site s'il est deja configure # sinon par defaut lire_meta reglera _DEFAULT_CHARSET # (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET) lire_metas(); if ($login) { include_spip('inc/charsets'); $nom = importer_charset($nom, _DEFAULT_CHARSET); $login = importer_charset($login, _DEFAULT_CHARSET); $email = importer_charset($email, _DEFAULT_CHARSET); # pour le passwd, bizarrement il faut le convertir comme s'il avait # ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js $pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1'); include_spip('auth/sha256.inc'); include_spip('inc/acces'); $htpass = generer_htpass($pass); $alea_actuel = creer_uniqid(); $alea_futur = creer_uniqid(); $shapass = _nano_sha256($alea_actuel . $pass); // prelablement, creer le champ webmestre si il n'existe pas (install neuve // sur une vieille base $t = sql_showtable("spip_auteurs", true); if (!isset($t['field']['webmestre'])) { @sql_alter("TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL"); } $id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login="******"nom" => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'htpass' => $htpass, 'statut' => '0minirezo'), "id_auteur={$id_auteur}"); } else { $id_auteur = sql_insertq('spip_auteurs', array('nom' => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'statut' => '0minirezo')); } // le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne @sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur={$id_auteur}"); // inserer email comme email webmaster principal // (sauf s'il est vide: cas de la re-installation) if ($email) { ecrire_meta('email_webmaster', $email); } // Connecter directement celui qui vient de (re)donner son login // mais sans cookie d'admin ni connexion longue include_spip('inc/auth'); if (!($auteur = auth_identifier_login($login, $pass)) or !auth_loger($auteur, true)) { spip_log("login automatique impossible {$auth_spip} {$session}" . count($row)); } } // installer les metas $config = charger_fonction('config', 'inc'); $config(); // activer les plugins // leur installation ne peut pas se faire sur le meme hit, il faudra donc // poursuivre au hit suivant include_spip('inc/plugin'); actualise_plugins_actifs(); include_spip('inc/distant'); redirige_par_entete(parametre_url(self(), 'etape', '4', '&')); }
function charset2unicode($texte, $charset='AUTO' /* $forcer: obsolete*/) { static $trans; if ($charset == 'AUTO') $charset = $GLOBALS['meta']['charset']; if ($charset == '') $charset = 'iso-8859-1'; $charset = strtolower($charset); switch ($charset) { case 'utf-8': case 'utf8': return utf_8_to_unicode($texte); case 'iso-8859-1': $texte = corriger_caracteres_windows($texte, 'iso-8859-1'); // pas de break; ici, on suit sur default: default: // mbstring presente ? if (init_mb_string()) { if ($order = mb_detect_order() # mb_string connait-il $charset? AND mb_detect_order($charset)) { $s = mb_convert_encoding($texte, 'utf-8', $charset); if ($s && $s != $texte) return utf_8_to_unicode($s); } mb_detect_order($order); # remettre comme precedemment } // Sinon, peut-etre connaissons-nous ce charset ? if (!isset($trans[$charset])) { global $CHARSET; if ($cset = load_charset($charset) AND is_array($CHARSET[$cset])) foreach ($CHARSET[$cset] as $key => $val) { $trans[$charset][chr($key)] = '&#'.$val.';'; } } if (count($trans[$charset])) return str_replace(array_keys($trans[$charset]),array_values($trans[$charset]),$texte); // Sinon demander a iconv (malgre le fait qu'il coupe quand un // caractere n'appartient pas au charset, mais c'est un probleme // surtout en utf-8, gere ci-dessus) if (test_iconv()) { $s = iconv($charset, 'utf-32le', $texte); if ($s) return utf_32_to_unicode($s); } // Au pire ne rien faire spip_log("erreur charset '$charset' non supporte"); return $texte; } }
/** * Transforme une chaîne utf-8 en utf-8 sans "planes" * ce qui permet de la donner à MySQL "utf8", qui n'est pas un utf-8 complet * L'alternative serait d'utiliser utf8mb4 * * @param string $x * La chaîne à transformer * @return string * La chaîne avec les caractères utf8 des hauts "planes" échappée * en unicode : 💩 */ function utf8_noplanes($x) { $regexp_utf8_4bytes = '/( \\xF0[\\x90-\\xBF][\\x80-\\xBF]{2} # planes 1-3 | [\\xF1-\\xF3][\\x80-\\xBF]{3} # planes 4-15 | \\xF4[\\x80-\\x8F][\\x80-\\xBF]{2} # plane 16 )/xS'; if (preg_match_all($regexp_utf8_4bytes, $x, $z, PREG_PATTERN_ORDER)) { foreach ($z[0] as $k) { $ku = utf_8_to_unicode($k); $x = str_replace($k, $ku, $x); } } return $x; }
function charset2unicode($texte, $charset = 'AUTO', $forcer = false) { static $trans; if ($charset == 'AUTO') { $charset = read_meta('charset'); } $charset = strtolower($charset); switch ($charset) { case 'utf-8': // Le passage par utf-32 devrait etre plus rapide // (traitements PHP reduits au minimum) if (test_iconv()) { $s = iconv('utf-8', 'utf-32', $texte); if ($s) { return utf_32_to_unicode($s); } } return utf_8_to_unicode($texte); case 'iso-8859-1': // On commente cet appel tant qu'il reste des spip v<1.5 dans la nature // pour que le filtre |entites_unicode donne des backends lisibles sur ces spips. if (!$forcer) { return $texte; } default: if (test_iconv()) { $s = iconv($charset, 'utf-32', $texte); if ($s) { return utf_32_to_unicode($s); } } if (!$trans[$charset]) { global $CHARSET; load_charset($charset); reset($CHARSET[$charset]); while (list($key, $val) = each($CHARSET[$charset])) { $trans[$charset][chr($key)] = '&#' . $val . ';'; } } if ($trans[$charset]) { if ($GLOBALS['flag_strtr2']) { $texte = strtr($texte, $trans[$charset]); } else { reset($trans[$charset]); while (list($from, $to) = each($trans[$charset])) { $texte = str_replace($from, $to, $texte); } } } return $texte; } }
/** * Conversion safe d'un texte utf en isotruc * @param string $text * @param string $mode * @return string */ protected function safe_utf8_decode($text,$mode='texte_brut') { if (!is_utf8($text)) return ($text); if (function_exists('iconv') && $mode == 'texte_brut') { $text = str_replace('’',"'",$text); $text = iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text); return str_replace('’',"'",$text); } else { if ($mode == 'texte_brut') { $text = str_replace('’',"'",$text); } $text = unicode2charset(utf_8_to_unicode($text),'iso-8859-1'); return str_replace('’',"'",$text); } }