Ejemplo n.º 1
0
function glossaire_accents_callback($matches) {
	$u = unicode2charset($matches[0]);	// charset
	$u2 = init_mb_string()?mb_strtoupper($u):strtoupper($u);	// charset majuscule
	$u3 = htmlentities($u2, ENT_QUOTES, $GLOBALS['meta']['charset']);	// html majuscule
	$u4 = html2unicode($u3); // unicode majuscule
	$a = array_unique(array($u, $u2, htmlentities($u, ENT_QUOTES, $GLOBALS['meta']['charset']), $u3, $matches[0], $u4));
//	$a = array_unique(array($u, htmlentities($u, ENT_QUOTES, $GLOBALS['meta']['charset']), $matches[0]));
	return '(?:'.join('|', $a).')';
}
Ejemplo n.º 2
0
function rtl_visuel($texte, $rtl_global)
{
    // hebreu + arabe: 54928 => 56767
    // hebreu + presentation A: 15707294 => 15710140
    // arabe presentation: 15708336 => 15711164
    #	echo hexdec("efb7bc");
    // premiere passe pour determiner s'il y a du rtl
    // de facon a placer ponctuation et mettre les mots dans l'ordre
    $arabic_letters = array(array("ي", "ﻱ", "ﻳ", "ﻴ", "ﻲ"), array("ب", "ﺏ", "ﺑ", "ﺒ", "ﺐ"), array("ا", "ا", "ﺍ", "ﺍ", "ﺎ"), array("إ", "إ", "إ", "ﺈ", "ﺈ"), array("ل", "ﻝ", "ﻟ", "ﻠ", "ﻞ"), array("خ", "ﺥ", "ﺧ", "ﺨ", "ﺦ"), array("ج", "ﺝ", "ﺟ", "ﺠ", "ﺞ"), array("س", "ﺱ", "ﺳ", "ﺴ", "ﺲ"), array("ن", "ﻥ", "ﻧ", "ﻨ", "ﻦ"), array("ش", "ﺵ", "ﺷ", "ﺸ", "ﺶ"), array("ق", "ﻕ", "ﻗ", "ﻘ", "ﻖ"), array("ح", "ﺡ", "ﺣ", "ﺤ", "ﺢ"), array("م", "ﻡ", "ﻣ", "ﻤ", "ﻢ"), array("ر", "ر", "ﺭ", "ﺮ", "ﺮ"), array("ع", "ع", "ﻋ", "ﻌ", "ﻊ"), array("و", "و", "ﻭ", "ﻮ", "ﻮ"), array("ة", "ة", "ة", "ﺔ", "ﺔ"), array("ف", "ﻑ", "ﻓ", "ﻔ", "ﻒ"), array("ﻻ", "ﻻ", "ﻻ", "ﻼ", "ﻼ"), array("ح", "ﺡ", "ﺣ", "ﺤ", "ﺢ"), array("ت", "ﺕ", "ﺗ", "ﺘ", "ﺖ"), array("ض", "ﺽ", "ﺿ", "ﻀ", "ﺾ"), array("ك", "ك", "ﻛ", "ﻜ", "ﻚ"), array("ه", "ﻩ", "ﻫ", "ﻬ", "ﻪ"), array("ي", "ي", "ﻳ", "ﻴ", "ﻲ"), array("ئ", "ﺉ", "ﺋ", "ﺌ", "ﺊ"), array("ص", "ﺹ", "ﺻ", "ﺼ", "ﺺ"), array("ث", "ﺙ", "ﺛ", "ﺜ", "ﺚ"), array("ﻷ", "ﻷ", "ﻷ", "ﻸ", "ﻸ"), array("د", "ﺩ", "ﺩ", "ﺪ", "ﺪ"), array("ذ", "ﺫ", "ﺫ", "ﺬ", "ﺬ"), array("ط", "ﻁ", "ﻃ", "ﻄ", "ﻂ"), array("آ", "آ", "آ", "ﺂ", "ﺂ"), array("أ", "أ", "أ", "ﺄ", "ﺄ"), array("ؤ", "ؤ", "ؤ", "ﺆ", "ﺆ"), array("ز", "ز", "ز", "ﺰ", "ﺰ"), array("ظ", "ظ", "ﻇ", "ﻈ", "ﻆ"), array("غ", "غ", "ﻏ", "ﻐ", "ﻎ"), array("ى", "ى", "ﯨ", "ﯩ", "ﻰ"), array("پ", "پ", "ﭘ", "ﭙ", "ﭗ"), array("چ", "چ", "ﭼ", "ﭽ", "ﭻ"));
    if (init_mb_string() and mb_regex_encoding() !== "UTF-8") {
        echo "Attention: dans php.ini, il faut indiquer:<br /><strong>mbstring.internal_encoding = UTF-8</strong>";
    }
    $texte = explode(" ", $texte);
    foreach ($texte as $mot) {
        $res = "";
        // Inserer des indicateurs de debut/fin
        $mot = "^" . $mot . "^";
        $mot = preg_replace(",&nbsp;,u", " ", $mot);
        $mot = preg_replace(",&#171;,u", "«", $mot);
        $mot = preg_replace(",&#187;,u", "»", $mot);
        // ponctuations
        $ponctuations = array("/", "-", "«", "»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!", " ");
        foreach ($ponctuations as $ponct) {
            $mot = str_replace("{$ponct}", "^{$ponct}^", $mot);
        }
        // lettres forcant coupure
        $mot = preg_replace(",ا,u", "ا^", $mot);
        $mot = preg_replace(",د,u", "د^", $mot);
        $mot = preg_replace(",أ,u", "أ^", $mot);
        $mot = preg_replace(",إ,u", "إ^", $mot);
        $mot = preg_replace(",أ,u", "أ^", $mot);
        $mot = preg_replace(",ر,u", "ر^", $mot);
        $mot = preg_replace(",ذ,u", "ذ^", $mot);
        $mot = preg_replace(",ز,u", "ز^", $mot);
        $mot = preg_replace(",و,u", "و^", $mot);
        $mot = preg_replace(",و,u", "و^", $mot);
        $mot = preg_replace(",ؤ,u", "ؤ^", $mot);
        $mot = preg_replace(",ة,u", "ة^", $mot);
        //		$mot = preg_replace(",ل,u", "^ل", $mot);
        //		$mot = preg_replace(",,", "^", $mot);
        $mot = preg_replace(",٠,u", "^٠^", $mot);
        $mot = preg_replace(",١,u", "^١^", $mot);
        $mot = preg_replace(",٢,u", "^٢^", $mot);
        $mot = preg_replace(",٣,u", "^٣^", $mot);
        $mot = preg_replace(",٤,u", "^٤^", $mot);
        $mot = preg_replace(",٥,u", "^٥^", $mot);
        $mot = preg_replace(",٦,u", "^٦^", $mot);
        $mot = preg_replace(",٧,u", "^٧^", $mot);
        $mot = preg_replace(",٨,u", "^٨^", $mot);
        $mot = preg_replace(",٩,u", "^٩^", $mot);
        // Ligatures
        $mot = preg_replace(",لا,u", "ﻻ", $mot);
        $mot = preg_replace(",لأ,u", "ﻷ", $mot);
        foreach ($arabic_letters as $a_l) {
            $mot = preg_replace(",([^\\^])" . $a_l[0] . "([^\\^]),u", "\\1" . $a_l[3] . "\\2", $mot);
            $mot = preg_replace(",\\^" . $a_l[0] . "([^\\^]),u", "^" . $a_l[2] . "\\1", $mot);
            $mot = preg_replace(",([^\\^])" . $a_l[0] . "\\^,u", "\\1" . $a_l[4] . "^", $mot);
            // il semble qu'il ne soit pas necessaire de remplacer
            // la lettre isolee
            //			$mot = preg_replace(",\^".$a_l[0]."\^,u", "^".$a_l[1]."^", $mot);
        }
        $mot = preg_replace(",\\^,u", "", $mot);
        $res = $mot;
        $res = rtl_reverse($mot, $rtl_global);
        /*
        $rtl = false;		
        for ($i = 0; $i < spip_strlen($mot); $i++) {
        	$lettre = spip_substr($mot, $i, 1);
        	$code = rtl_mb_ord($lettre);
        	if (($code >= 54928 && $code <= 56767) ||  ($code >= 15708336 && $code <= 15711164)) $rtl = true;
        }
        */
        if ($rtl_global) {
            $retour = $res . " " . $retour;
        } else {
            $retour = $retour . " " . $res;
        }
    }
    return $retour;
}
Ejemplo n.º 3
0
/**
 * Envoi d'un mail
 *
 * @param string $destinataire
 * @param string $sujet
 * @param string|array $corps
 *   - au format string, c'est un corps d'email au format texte, comme supporte nativement par le core
 *   - au format array, c'est un corps etendu qui peut contenir
 *     - string texte : le corps d'email au format texte
 *     - string from : email de l'envoyeur (prioritaire sur argument $from de premier niveau, deprecie)
 *     - array headers : tableau d'en-tetes personalises, une entree par ligne d'en-tete
 *         --- Support partiel par une fonction mail_embarquer_pieces_jointes a fournir, ---
 *         --- chargee de convertir en texte encodee les pieces jointes ---
 *     - array pieces_jointes : listes de pieces a embarquer dans l'email, chacune au format array :
 *       - string chemin : chemin file system pour trouver le fichier a embarquer
 *       - string nom : nom du document tel qu'apparaissant dans l'email
 *       - string encodage : encodage a utiliser, parmi 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
 *       - string mime : mime type du document
 *             --- Non implemente ici ---
 *     - string html : le corps d'email au format html
 *     - string nom_envoyeur : un nom d'envoyeur pour completer l'email from
 *     - string cc : destinataires en copie conforme
 *     - string bcc : destinataires en copie conforme cachee
 *     - string adresse_erreur : addresse de retour en cas d'erreur d'envoi
 * @param string $from (deprecie, utiliser l'entree from de $corps)
 * @param string $headers (deprecie, utiliser l'entree headers de $corps)
 * @return bool
 */
function inc_envoyer_mail_dist($destinataire, $sujet, $corps, $from = '', $headers = '')
{
    if (!email_valide($destinataire)) {
        return false;
    }
    if ($destinataire == _T('info_mail_fournisseur')) {
        return false;
    }
    // tres fort
    // Fournir si possible un Message-Id: conforme au RFC1036,
    // sinon SpamAssassin denoncera un MSGID_FROM_MTA_HEADER
    $email_envoi = $GLOBALS['meta']['email_envoi'];
    if (!email_valide($email_envoi)) {
        spip_log('Meta email_envoi invalide. Le mail sera probablement vu comme spam.');
        $email_envoi = $destinataire;
    }
    $parts = '';
    if (is_array($corps)) {
        $texte = $corps['texte'];
        $from = isset($corps['from']) ? $corps['from'] : $from;
        $headers = isset($corps['headers']) ? $corps['headers'] : $headers;
        if (is_array($headers)) {
            $headers = implode("\n", $headers);
        }
        if ($corps['pieces_jointes'] and function_exists('mail_embarquer_pieces_jointes')) {
            $parts = mail_embarquer_pieces_jointes($corps['pieces_jointes']);
        }
    } else {
        $texte = $corps;
    }
    if (!$from) {
        $from = $email_envoi;
    }
    // ceci est la RegExp NO_REAL_NAME faisant hurler SpamAssassin
    if (preg_match('/^["\\s]*\\<?\\S+\\@\\S+\\>?\\s*$/', $from)) {
        $from .= ' (' . str_replace(')', '', translitteration(str_replace('@', ' at ', $from))) . ')';
    }
    // nettoyer les &eacute; &#8217, &emdash; etc...
    // les 'cliquer ici' etc sont a eviter;  voir:
    // http://mta.org.ua/spamassassin-2.55/stuff/wiki.CustomRulesets/20050914/rules/french_rules.cf
    $texte = nettoyer_caracteres_mail($texte);
    $sujet = nettoyer_caracteres_mail($sujet);
    // encoder le sujet si possible selon la RFC
    if (init_mb_string()) {
        # un bug de mb_string casse mb_encode_mimeheader si l'encoding interne
        # est UTF-8 et le charset iso-8859-1 (constate php5-mac ; php4.3-debian)
        $charset = $GLOBALS['meta']['charset'];
        mb_internal_encoding($charset);
        $sujet = mb_encode_mimeheader($sujet, $charset, 'Q', "\n");
        mb_internal_encoding('utf-8');
    }
    if (function_exists('wordwrap') && preg_match(',multipart/mixed,', $headers) == 0) {
        $texte = wordwrap($texte);
    }
    list($headers, $texte) = mail_normaliser_headers($headers, $from, $destinataire, $texte, $parts);
    if (_OS_SERVEUR == 'windows') {
        $texte = preg_replace("@\r*\n@", "\r\n", $texte);
        $headers = preg_replace("@\r*\n@", "\r\n", $headers);
        $sujet = preg_replace("@\r*\n@", "\r\n", $sujet);
    }
    spip_log("mail {$destinataire}\n{$sujet}\n{$headers}", 'mails');
    // mode TEST : forcer l'email
    if (defined('_TEST_EMAIL_DEST')) {
        if (!_TEST_EMAIL_DEST) {
            return false;
        } else {
            $texte = "Dest : {$destinataire}\r\n" . $texte;
            $destinataire = _TEST_EMAIL_DEST;
        }
    }
    return @mail($destinataire, $sujet, $texte, $headers);
}
Ejemplo n.º 4
0
function spip_strlen($c) {
	// Si ce n'est pas utf-8, utiliser strlen
	if ($GLOBALS['meta']['charset'] != 'utf-8')
		return strlen($c);

	// Sinon, utiliser mb_strlen() si disponible
	if (init_mb_string())
		return mb_strlen($c);

	// Methode manuelle : on supprime les bytes 10......,
	// on compte donc les ascii (0.......) et les demarrages
	// de caracteres utf-8 (11......)
	return strlen(preg_replace(',[\x80-\xBF],S', '', $c));
}
Ejemplo n.º 5
0
/**
 * Retourne la longueur d'une chaîne utf-8
 *
 * Version utf-8 de strlen
 *
 * @param string $c
 *     La chaîne à compter
 * @return int
 *     Longueur de la chaîne
 */
function spip_strlen($c)
{
    // On transforme les sauts de ligne pour ne pas compter deux caractères
    $c = str_replace("\r\n", "\n", $c);
    // Si ce n'est pas utf-8, utiliser strlen
    if ($GLOBALS['meta']['charset'] != 'utf-8') {
        return strlen($c);
    }
    // Sinon, utiliser mb_strlen() si disponible
    if (init_mb_string()) {
        return mb_strlen($c);
    }
    // Methode manuelle : on supprime les bytes 10......,
    // on compte donc les ascii (0.......) et les demarrages
    // de caracteres utf-8 (11......)
    return strlen(preg_replace(',[\\x80-\\xBF],S', '', $c));
}
Ejemplo n.º 6
0
function rtl_visuel($texte, $rtl_global) {
	// hebreu + arabe: 54928 => 56767
	// hebreu + presentation A: 15707294 => 15710140
	// arabe presentation: 15708336 => 15711164
	
	#	echo hexdec("efb7bc");

	// premiere passe pour determiner s'il y a du rtl
	// de facon a placer ponctuation et mettre les mots dans l'ordre


	$arabic_letters = array(
		array("ي", // lettre 0
			"ﻱ",  // isolee 1
			"ﻳ", // debut 2
			"ﻴ", // milieu 3
			"ﻲ"),
		array("ب", // lettre 0
			"ﺏ",  // isolee 1
			"ﺑ", // debut 2
			"ﺒ", // milieu 3
			"ﺐ"),
		array("ا", // lettre 0
			"ا",  // isolee 1
			"ﺍ", // debut 2
			"ﺍ", // milieu 3
			"ﺎ"),
		array("إ", // lettre 0
			"إ",  // isolee 1
			"إ", // debut 2
			"ﺈ", // milieu 3
			"ﺈ"),
		array("ل", // lettre 0
			"ﻝ",  // isolee 1
			"ﻟ", // debut 2
			"ﻠ", // milieu 3
			"ﻞ"),
		array("خ", // lettre 0
			"ﺥ",  // isolee 1
			"ﺧ", // debut 2
			"ﺨ", // milieu 3
			"ﺦ"),
		array("ج", // lettre 0
			"ﺝ",  // isolee 1
			"ﺟ", // debut 2
			"ﺠ", // milieu 3
			"ﺞ"),
		array("س", // lettre 0
			"ﺱ",  // isolee 1
			"ﺳ", // debut 2
			"ﺴ", // milieu 3
			"ﺲ"),
		array("ن", // lettre 0
			"ﻥ",  // isolee 1
			"ﻧ", // debut 2
			"ﻨ", // milieu 3
			"ﻦ"),
		array("ش", // lettre 0
			"ﺵ",  // isolee 1
			"ﺷ", // debut 2
			"ﺸ", // milieu 3
			"ﺶ"),
		array("ق", // lettre 0
			"ﻕ",  // isolee 1
			"ﻗ", // debut 2
			"ﻘ", // milieu 3
			"ﻖ"),
		array("ح", // lettre 0
			"ﺡ",  // isolee 1
			"ﺣ", // debut 2
			"ﺤ", // milieu 3
			"ﺢ"),
		array("م", // lettre 0
			"ﻡ",  // isolee 1
			"ﻣ", // debut 2
			"ﻤ", // milieu 3
			"ﻢ"),
		array("ر", // lettre 0
			"ر",  // isolee 1
			"ﺭ", // debut 2
			"ﺮ", // milieu 3
			"ﺮ"),
		array("ع", // lettre 0
			"ع",  // isolee 1
			"ﻋ", // debut 2
			"ﻌ", // milieu 3
			"ﻊ"),
		array("و", // lettre 0
			"و",  // isolee 1
			"ﻭ", // debut 2
			"ﻮ", // milieu 3
			"ﻮ"),
		array("ة", // lettre 0
			"ة",  // isolee 1
			"ة", // debut 2
			"ﺔ", // milieu 3
			"ﺔ"),
		array("ف", // lettre 0
			"ﻑ",  // isolee 1
			"ﻓ", // debut 2
			"ﻔ", // milieu 3
			"ﻒ"),
		array("ﻻ", // lettre 0
			"ﻻ",  // isolee 1
			"ﻻ", // debut 2
			"ﻼ", // milieu 3
			"ﻼ"),
		array("ح", // lettre 0
			"ﺡ",  // isolee 1
			"ﺣ", // debut 2
			"ﺤ", // milieu 3
			"ﺢ"),
		array("ت", // lettre 0
			"ﺕ",  // isolee 1
			"ﺗ", // debut 2
			"ﺘ", // milieu 3
			"ﺖ"),
		array("ض", // lettre 0
			"ﺽ",  // isolee 1
			"ﺿ", // debut 2
			"ﻀ", // milieu 3
			"ﺾ"),
		array("ك", // lettre 0
			"ك",  // isolee 1
			"ﻛ", // debut 2
			"ﻜ", // milieu 3
			"ﻚ"),
		array("ه", // lettre 0
			"ﻩ",  // isolee 1
			"ﻫ", // debut 2
			"ﻬ", // milieu 3
			"ﻪ"),
		array("ي", // lettre 0
			"ي",  // isolee 1
			"ﻳ", // debut 2
			"ﻴ", // milieu 3
			"ﻲ"),
		array("ئ", // lettre 0
			"ﺉ",  // isolee 1
			"ﺋ", // debut 2
			"ﺌ", // milieu 3
			"ﺊ"),
		array("ص", // lettre 0
			"ﺹ",  // isolee 1
			"ﺻ", // debut 2
			"ﺼ", // milieu 3
			"ﺺ"),
		array("ث", // lettre 0
			"ﺙ",  // isolee 1
			"ﺛ", // debut 2
			"ﺜ", // milieu 3
			"ﺚ"),
		array("ﻷ", // lettre 0
			"ﻷ",  // isolee 1
			"ﻷ", // debut 2
			"ﻸ", // milieu 3
			"ﻸ"),
		array("د", // lettre 0
			"ﺩ",  // isolee 1
			"ﺩ", // debut 2
			"ﺪ", // milieu 3
			"ﺪ"),
		array("ذ", // lettre 0
			"ﺫ",  // isolee 1
			"ﺫ", // debut 2
			"ﺬ", // milieu 3
			"ﺬ"),
		array("ط", // lettre 0
			"ﻁ",  // isolee 1
			"ﻃ", // debut 2
			"ﻄ", // milieu 3
			"ﻂ"),
		array("آ", // lettre 0
			"آ",  // isolee 1
			"آ", // debut 2
			"ﺂ", // milieu 3
			"ﺂ"),
		array("أ", // lettre 0
			"أ",  // isolee 1
			"أ", // debut 2
			"ﺄ", // milieu 3
			"ﺄ"),
		array("ؤ", // lettre 0
			"ؤ",  // isolee 1
			"ؤ", // debut 2
			"ﺆ", // milieu 3
			"ﺆ"),
		array("ز", // lettre 0
			"ز",  // isolee 1
			"ز", // debut 2
			"ﺰ", // milieu 3
			"ﺰ"),
		array("ظ", // lettre 0
			"ظ",  // isolee 1
			"ﻇ", // debut 2
			"ﻈ", // milieu 3
			"ﻆ"),
		array("غ", // lettre 0
			"غ",  // isolee 1
			"ﻏ", // debut 2
			"ﻐ", // milieu 3
			"ﻎ"),
		array("ى", // lettre 0
			"ى",  // isolee 1
			"ﯨ", // debut 2
			"ﯩ", // milieu 3
			"ﻰ"),
		array("پ", // lettre 0
			"پ",  // isolee 1
			"ﭘ", // debut 2
			"ﭙ", // milieu 3
			"ﭗ"),
		array("چ", // lettre 0
			"چ",  // isolee 1
			"ﭼ", // debut 2
			"ﭽ", // milieu 3
			"ﭻ")
	);
	
	if(init_mb_string() AND mb_regex_encoding() !== "UTF-8") echo "Attention: dans php.ini, il faut indiquer:<br /><strong>mbstring.internal_encoding = UTF-8</strong>";
	
	
	$texte = explode(" ", $texte);
	
	foreach ($texte as $mot) {
		$res = "";

		// Inserer des indicateurs de debut/fin
		$mot = "^".$mot."^";

		$mot = preg_replace(",&nbsp;,u", " ", $mot);
		$mot = preg_replace(",&#171;,u", "«", $mot);
		$mot = preg_replace(",&#187;,u", "»", $mot);

		// ponctuations
		$ponctuations = array("/", "-", "«","»", "“", "”", ",", ".", " ", ":", ";", "(", ")", "،", "؟", "?", "!"," ");
		foreach($ponctuations as $ponct) {
			$mot = str_replace("$ponct", "^$ponct^", $mot);
		}

		// lettres forcant coupure
		$mot = preg_replace(",ا,u", "ا^", $mot);
		$mot = preg_replace(",د,u", "د^", $mot);
		$mot = preg_replace(",أ,u", "أ^", $mot);
		$mot = preg_replace(",إ,u", "إ^", $mot);
		$mot = preg_replace(",أ,u", "أ^", $mot);
		$mot = preg_replace(",ر,u", "ر^", $mot);
		$mot = preg_replace(",ذ,u", "ذ^", $mot);
		$mot = preg_replace(",ز,u", "ز^", $mot);
		$mot = preg_replace(",و,u", "و^", $mot);
		$mot = preg_replace(",و,u", "و^", $mot);
		$mot = preg_replace(",ؤ,u", "ؤ^", $mot);
		$mot = preg_replace(",ة,u", "ة^", $mot);
		//		$mot = preg_replace(",ل,u", "^ل", $mot);
		//		$mot = preg_replace(",,", "^", $mot);


		$mot = preg_replace(",٠,u", "^٠^", $mot);
		$mot = preg_replace(",١,u", "^١^", $mot);
		$mot = preg_replace(",٢,u", "^٢^", $mot);
		$mot = preg_replace(",٣,u", "^٣^", $mot);
		$mot = preg_replace(",٤,u", "^٤^", $mot);
		$mot = preg_replace(",٥,u", "^٥^", $mot);
		$mot = preg_replace(",٦,u", "^٦^", $mot);
		$mot = preg_replace(",٧,u", "^٧^", $mot);
		$mot = preg_replace(",٨,u", "^٨^", $mot);
		$mot = preg_replace(",٩,u", "^٩^", $mot);


		// Ligatures
		$mot = preg_replace(",لا,u", "ﻻ", $mot);
		$mot = preg_replace(",لأ,u", "ﻷ", $mot);
		
		
		foreach ($arabic_letters as $a_l) {
			$mot = preg_replace(",([^\^])".$a_l[0]."([^\^]),u", "\\1".$a_l[3]."\\2", $mot);
			$mot = preg_replace(",\^".$a_l[0]."([^\^]),u", "^".$a_l[2]."\\1", $mot);
			$mot = preg_replace(",([^\^])".$a_l[0]."\^,u", "\\1".$a_l[4]."^", $mot);
			// il semble qu'il ne soit pas necessaire de remplacer
			// la lettre isolee
			//			$mot = preg_replace(",\^".$a_l[0]."\^,u", "^".$a_l[1]."^", $mot);
		}
		
				$mot = preg_replace(",\^,u", "", $mot);
		
		$res = $mot;
		$res = rtl_reverse($mot, $rtl_global);

		/*
		$rtl = false;		
		for ($i = 0; $i < spip_strlen($mot); $i++) {
			$lettre = spip_substr($mot, $i, 1);
			$code = rtl_mb_ord($lettre);
			if (($code >= 54928 && $code <= 56767) ||  ($code >= 15708336 && $code <= 15711164)) $rtl = true;
		}
		*/
		
		
		if ($rtl_global) $retour = $res . " " . $retour;
		else $retour = $retour. " ".$res;
	}
	
	
	return $retour;
}