コード例 #1
0
ファイル: diff.php プロジェクト: xablen/Semaine14_SPIP_test
function preparer_diff($texte)
{
    include_spip('inc/charsets');
    $charset = $GLOBALS['meta']['charset'];
    if ($charset == 'utf-8') {
        return unicode_to_utf_8(html2unicode($texte));
    }
    return unicode_to_utf_8(html2unicode(charset2unicode($texte, $charset, true)));
}
コード例 #2
0
ファイル: convert_utf8.php プロジェクト: rhertzog/lcs
function convert_extra($v, $charset_source) {
	if ($extra = @unserialize($v)) {
		foreach ($extra as $key=>$val)
			$extra[$key] = unicode_to_utf_8(
			charset2unicode($val, $charset_source));
		return ", extra=".sql_quote(serialize($extra));
	}
}
コード例 #3
0
ファイル: charsets.php プロジェクト: rhertzog/lcs
function translitteration($texte, $charset='AUTO', $complexe='') {
	// 0. Supprimer les caracteres illegaux
	include_spip('inc/filtres');
	$texte = corriger_caracteres($texte);

	// 1. Passer le charset et les &eacute en utf-8
	$texte = unicode_to_utf_8(html2unicode(charset2unicode($texte, $charset, true)));

	return translitteration_rapide($texte,$charset,$complexe);
}
コード例 #4
0
ファイル: filtres.php プロジェクト: rhertzog/lcs
function lignes_longues($texte, $l = 70, $espace='­') {
	if ($l<1) return $texte;
	if (!preg_match("/[\w,\/.]{".$l."}/UmsS", $texte))
		return $texte;
	// Passer en utf-8 pour ne pas avoir de coupes trop courtes avec les &#xxxx;
	// qui prennent 7 caracteres
	#include_spip('inc/charsets');
	$texte = str_replace("&nbsp;","<&nbsp>",$texte);
	$texte = html2unicode($texte, true);
	$texte = str_replace("<&nbsp>","&nbsp;",$texte);
	$texte = unicode_to_utf_8(charset2unicode(
		$texte, $GLOBALS['meta']['charset'], true));

	// echapper les tags (on ne veut pas casser les a href=...)
	$tags = array();
	if (preg_match_all('/<.+>|&(?:amp;)?#x?[0-9]+;|&(?:amp;)?[a-zA-Z1-4]{2,6};/UumsS', $texte, $t, PREG_SET_ORDER)) {
		foreach ($t as $n => $tag) {
			$tags[$n] = $tag[0];
			$texte = str_replace($tag[0], "<---$n--->", $texte);
		}
	}
	// casser les mots longs qui restent
	// note : on pourrait preferer couper sur les / , etc.
	if (preg_match_all("/[\w,\/.]{".$l."}/UmsS", $texte, $longs, PREG_SET_ORDER)) {
		foreach ($longs as $long) {
			$texte = str_replace($long[0], $long[0].$espace, $texte);
		}
	}

	// retablir les tags
	if (preg_match_all('/<---[\s0-9]+--->/UumsS', $texte, $t, PREG_SET_ORDER)) {
		foreach ($t as $tag) {
			$n = intval(preg_replace(',[^0-9]+,U','',$tag[0]));
			$texte = str_replace($tag[0], $tags[$n], $texte);
		}
	}

	return importer_charset($texte, 'utf-8');
}
コード例 #5
0
ファイル: inc_charsets.php プロジェクト: nyimbi/legalcase
function translitteration($texte, $charset = 'AUTO', $complexe = '')
{
    static $trans;
    if ($charset == 'AUTO') {
        $charset = read_meta('charset');
    }
    $charset = strtolower($charset);
    $table_translit = 'translit' . $complexe;
    // 1. Passer le charset et les &eacute en utf-8
    $texte = unicode_to_utf_8(html2unicode(charset2unicode($texte, $charset, true)));
    // 2. Translitterer grace a la table predefinie
    if (!$trans[$complexe]) {
        global $CHARSET;
        load_charset($table_translit);
        reset($CHARSET[$table_translit]);
        while (list($key, $val) = each($CHARSET[$table_translit])) {
            $trans[$complexe][caractere_utf_8($key)] = $val;
        }
    }
    if ($GLOBALS['flag_strtr2']) {
        $texte = strtr($texte, $trans[$complexe]);
    } else {
        $tr = $trans[$complexe];
        while (list($from, $to) = each($tr)) {
            $texte = str_replace($from, $to, $texte);
        }
    }
    /*
    	// Le probleme d'iconv c'est qu'il risque de nous renvoyer des ? alors qu'on
    	// prefere garder l'utf-8 pour que la chaine soit indexable.
    	// 3. Translitterer grace a iconv
    	if ($GLOBALS['flag_iconv'] && preg_match('/&#0*([0-9]+);/', $texte)) {
    		$texte = iconv('utf-8', 'ascii//translit', $texte);
    	}
    */
    return $texte;
}
コード例 #6
0
ファイル: facteur.php プロジェクト: samszo/open-edition
	/**
	 * @param $email
	 * @param $objet
	 * @param $message_html
	 * @param $message_texte
	 * @param array $options
	 *
	 */
	public function __construct($email, $objet, $message_html, $message_texte, $options = array()) {
		// On récupère toutes les options par défaut depuis le formulaire de config
		$defaut = array();
		foreach (array(
			'adresse_envoi', 'adresse_envoi_email', 'adresse_envoi_nom', 'forcer_from',
			'cc', 'bcc',
			'smtp', 'smtp_host', 'smtp_port', 'smtp_auth',
			'smtp_username', 'smtp_password', 'smtp_secure', 'smtp_sender',
			'filtre_images', 'filtre_iso_8859',
		) as $config) {
			$defaut[$config] = isset($GLOBALS['meta']["facteur_$config"]) ? $GLOBALS['meta']["facteur_$config"] : '';
		}
		// On fusionne les options avec d'éventuelles surcharges lors de l'appel
		$options = array_merge($defaut, $options);

		// par defaut on log rien car tres verbeux
		// on utilise facteur_log_debug qui filtre log SPIP en _LOG_DEBUG
		$this->SMTPDebug = 0;
		$this->Debugoutput = "facteur_log_debug";
		// Il est possible d'avoir beaucoup plus de logs avec 2, 3 ou 4, ce qui logs les échanges complets avec le serveur
		// utiliser avec un define('_MAX_LOG',1000); car sinon on est limite a 100 lignes par hit et phpMailer est tres verbeux
		if (defined('_FACTEUR_DEBUG_SMTP')) {
			$this->SMTPDebug = _FACTEUR_DEBUG_SMTP ;
		}
		$this->exceptions = false;


		if (
			$options['adresse_envoi'] == 'oui'
			and $options['adresse_envoi_email']
		) {
			$this->From = $options['adresse_envoi_email'];
		}
		else {
			$this->From = (isset($GLOBALS['meta']["email_envoi"]) AND $GLOBALS['meta']["email_envoi"]) ?
				$GLOBALS['meta']["email_envoi"]
				: $GLOBALS['meta']['email_webmaster'];
		}

		// Si plusieurs emails dans le from, pas de Name !
		if (strpos($this->From,",") === false) {
			if (
				$options['adresse_envoi'] == 'oui'
				and $options['adresse_envoi_nom']
			) {
				$this->FromName = $options['adresse_envoi_nom'];
			}
			// Par défaut, l'envoyeur est le nom du site
			else {
				$this->FromName = strip_tags(extraire_multi($GLOBALS['meta']['nom_site']));
			}
		}

		// si forcer_from, on sauvegarde le From et FromName par defaut, qui seront utilises
		// si From n'est pas dans le meme domaine
		// (utiliser le facteur avec un service externe qui necessite la validation des domaines d'envoi)
		if ($options['forcer_from']=='oui'){
			$this->ForceFrom = $this->From;
			$this->ForceFromName = $this->FromName;
		}

		$this->CharSet = "utf-8";
		$this->Mailer = 'mail';
		$this->Subject = unicode_to_utf_8(charset2unicode($objet,$GLOBALS['meta']['charset']));

		//Pour un envoi multiple de mail, $email doit être un tableau avec les adresses.
		if (is_array($email)) {
			foreach ($email as $cle => $adresseMail) {
				if (!$this->AddAddress($adresseMail)) {
					spip_log("Erreur AddAddress $adresseMail : ".print_r($this->ErrorInfo, true), 'facteur.'._LOG_ERREUR);
				}
			}
		}
		elseif (!$this->AddAddress($email)) {
			spip_log("Erreur AddAddress $email : ".print_r($this->ErrorInfo, true), 'facteur.'._LOG_ERREUR);
		}

		// Retour des erreurs
		if (!empty($options['smtp_sender'])) {
			$this->Sender = $options['smtp_sender'];
			$this->AddCustomHeader("Errors-To: ".$this->Sender);
		}

		// Destinataires en copie, seulement s'il n'y a pas de destinataire de test
		if (!defined('_TEST_EMAIL_DEST')){
			if (!empty($options['cc'])) {
				$this->AddCC($options['cc']);
			}
			if (!empty($options['bcc'])) {
				$this->AddBCC($options['bcc']);
			}
		}

		// Si on envoie avec un SMTP explicite
		if (isset($options['smtp']) AND $options['smtp'] == 'oui') {
			$this->Mailer	= 'smtp';
			$this->Host 	= $options['smtp_host'];
			$this->Port 	= $options['smtp_port'];

			// SMTP authentifié
			if ($options['smtp_auth'] == 'oui') {
				$this->SMTPAuth = true;
				$this->Username = $options['smtp_username'];
				$this->Password = $options['smtp_password'];
			}
			else {
				$this->SMTPAuth = false;
			}

			if ($options['smtp_secure'] == 'ssl') {
				$this->SMTPSecure = 'ssl';
			}
			if ($options['smtp_secure'] == 'tls') {
				$this->SMTPSecure = 'tls';
			}

			// Pour le moment on remet l'ancien fonctionnement :
			// on ne doit pas tester les certificats si pas demandé explicitement avec l'option TLS !
			$this->SMTPAutoTLS = false;
		}

		// S'il y a un contenu HTML
		if (!empty($message_html)) {
			$message_html = unicode_to_utf_8(charset2unicode($message_html, $GLOBALS['meta']['charset']));

			$this->Body = $message_html;
			$this->IsHTML(true);
			if ($options['filtre_images']) {
				$this->JoindreImagesHTML();
			}

			$this->UrlsAbsolues();
		}

		// S'il y a un contenu texte brut
		if (!empty($message_texte)) {
			$message_texte = unicode_to_utf_8(charset2unicode($message_texte, $GLOBALS['meta']['charset']));

			// Si pas de HTML on le remplace en tant que contenu principal
			if (!$this->Body) {
				$this->IsHTML(false);
				$this->Body = $message_texte;
			}
			// Sinon on met le texte brut en contenu alternatif
			else {
				$this->AltBody = $message_texte;
			}
		}

		if ($options['filtre_iso_8859']) {
			$this->ConvertirUtf8VersIso8859();
		}
	}