Forum ZitePLUS

La communauté des utilisateurs du CMS ZitePLUS

Vous n'êtes pas identifié(e).

#1 27/05/2013 19:45:11

Mick
Membre
Inscription : 24/05/2013
Messages : 9

Module contact - apostrophe dans objet et nom

Bonjour,
Après mon post sur l'apostrophe dans le module sondage, cette fois cela concerne le module Contact.
Dans contact.php il y a des lignes de codes pour gérer le remplacement de caractères spéciaux tel que l'apostrophe:

[== PHP ==]
// Remplacement de certains caractères spéciaux
				$message = html_entity_decode($message);
				$message = str_replace(''',"'",$message);
				$message = str_replace('’',"'",$message);

Du coup, le contenu du message affiche correctement le " ' ".

En revanche, un apostrophe dans le nom ou dans l'objet est remplacé par ' à l'arrivée dans ma boite mail.
Je n'ai pas de grandes notions de PHP et malgré mais tentative d'imitation du code de remplacement ci-dessus, je ne suis pas parvenu à appliquer ce remplacement pour ces deux champs.

Y aurait-il pour bonne âme  wink  pour me dire quel morceau de code ajouter pour résoudre ce problème?

Merci d'avance
Cordialement
Mick

Hors ligne

#2 28/05/2013 00:00:08

Mick
Membre
Inscription : 24/05/2013
Messages : 9

Re : Module contact - apostrophe dans objet et nom

J'ai fini par trouver (en plus quand on travaille sur le même fichier que celui qu'on transfert ça aide  big_smile ).
Bref, comme cela pourrait peut-être servir à d'autres voilà les modifications apportées au code pour les apostrophes dans objet, nom et signature:

[== PHP ==]
 // Remplacement de certains caractères spéciaux
		$message = html_entity_decode($message);
		$message = str_replace(''',"'",$message);
		$message = str_replace('’',"'",$message);
                $objet = str_replace(''',"'",$objet);
		$objet = str_replace('’',"'",$objet);
		$nom = str_replace(''',"'",$nom);
		$nom = str_replace('’',"'",$nom);
		$signature = str_replace(''',"'",$signature);
		$signature = str_replace('’',"'",$signature);
		$message = str_replace('<br>','',$message);
		$message = str_replace('<br />','',$message);

Voilà,
A bientôt smile

Hors ligne

#3 02/06/2013 09:22:06

bernquel
Membre
Inscription : 28/03/2013
Messages : 37

Re : Module contact - apostrophe dans objet et nom

Bonjour, merci pour ce coup de pouce.
Par contre à la réception, ma messagerie ne remplace pas les caractère spéciaux du nom de l'expéditeur "De :......" alors que c'est correcte dans le corps du message. J'ai essayé plusieurs petites choses mais sans succès.
Bonne journée.

Hors ligne

#4 15/06/2013 01:19:09

Mick
Membre
Inscription : 24/05/2013
Messages : 9

Re : Module contact - apostrophe dans objet et nom

Bonjour bernquel,
Je découvre un peu tard ton message.
As-tu trouvé une solution? Sinon peut-être qu'en voyant ton code...  wink

Hors ligne

#5 19/06/2013 08:46:29

bernquel
Membre
Inscription : 28/03/2013
Messages : 37

Re : Module contact - apostrophe dans objet et nom

Bonjour,
Non je n'ai pas trouvé la solution. Chez nous en Bretagne, l'apostrophe dans un nom propre ou prévoir peut arriver mais n'est pas si fréquent que cela alors je ne prends pas la tête, c'était juste de la curiosité.
Voici tout de même mon code :

[== PHP ==]
<?php

class Tcontact extends Tmodule {
	function dojob($opt="") {
		parent::dojob();
		$out='';
    self::$cms->content['dftcss'].= ' label {
                 width:150px;
                 float:left;
                 } ';
		require_once(self::$cms->zpath.'/outils.php');
    /*
     * cette fonction sert à nettoyer et enregistrer un texte
     */
    function Rec($postname) {
      $text ='';
      if (isset($_POST[$postname])) {    // si formulaire envoyé, on récupère le champ. Sinon, on initialise la variable
				$text = no_mq_gpc($_POST[$postname]);
	      $text = htmlspecialchars($text, ENT_QUOTES,''); // converts to string with " and ' as well
  	    $text = nl2br($text);
			}
      return $text;
    };
    /*
     * Cette fonction sert à vérifier la syntaxe d'un email
     */
    function verification_email($email) {
			$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
      return (@eregi($pattern,$email)) ? true : false;
    };
    $err_formulaire =false;
		$err_email = $err_message= $err_telephone= $err_messagesent = false;
			// Etablir valeurs des champs
		$nom = strtoupper(Rec('nom'));										//"NOM" en majuscule
		$prenom = ucwords(strtolower(Rec('prenom'))); 		//"Prénom" avec une majuscule puis en minuscules
		$civilite	= Rec('civilite');
    $ville   = Rec('ville');                                   // ---- ajout de la variable ville postal
    $telephone   = Rec('telephone');                         // ---- ajout de la variable telephone
    $email   = Rec('email');
    $objet   = Rec ('objet');                           // ---- valeur objet forcee
    $message = Rec('message');
		$signature = 'Message envoyé via le site internet ';      // à voir ============> dans les options de config
    if (isset($_POST['envoi'])) {
        // On va vérifier les variables et l'email ...
      $err_email = !verification_email($email);
      $err_message = empty($message);
      $err_nom = empty($nom);
      $err_telephone = empty($telephone);              // ---- ajout de la verification de telephone
      $err_formulaire |= $err_email | $err_message | $err_telephone | $err_nom ;
     	$err_captcha = false;
			if (!$err_formulaire) {
				self::$cms->doevent(eCaptcha,eAfter,$err_captcha);
	      $err_formulaire |= $err_captcha;
			}
				// Pas d'erreur => envoyer le message
      if ($err_formulaire==false) {
        	// les 4 variables sont remplies, on génère puis envoie le mail
        $headers = 'From: '.$civilite.' '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";  /// Logiquement, une génération par défaut est faite + ATTENTION: faire: noreply@hhhhh pour la copie utilisateur
				$cible = $this->getOption('destinataire');
					// envoyer une copie au visiteur ?
        if ($this->getOption('copie')) {
        	$cible .= ','.$email;
        };
//=> à voir
            // Remplacement de certains caractères spéciaux
		$message = html_entity_decode($message);
		$message = str_replace('&#039;',"'",$message);
		$message = str_replace('&#8217;',"'",$message);
        $objet = str_replace('&#039;',"'",$objet);
		$objet = str_replace('&#8217;',"'",$objet);
		$ville = str_replace('&#039;',"'",$ville);
		$ville = str_replace('&#8217;',"'",$ville);
		$nom = str_replace('&#039;',"'",$nom);
		$nom = str_replace('&#8217;',"'",$nom);
		$prenom = str_replace('&#039;',"'",$prenom);
		$prenom = str_replace('&#8217;',"'",$prenom);
		$signature = str_replace('&#039;',"'",$signature);
		$signature = str_replace('&#8217;',"'",$signature);
		$message = str_replace('<br>','',$message);
		$message = str_replace('<br />','',$message);;
				$message = wordwrap($message, 70);	// Dans le cas où nos lignes comportent plus de 70 caractères, nous les coupons en utilisant wordwrap()
				if ($this->getOption('signature')){		//Dans le cas ou il faut insérer une signature
					$message .= '
			
'.$signature;
			$message .= $this->getOption('endsignature');
				}
        	// Envoi du mail
      	if (mail($cible, $objet, $civilite.'Prénom : '.$prenom."\n".'Nom : '.$nom."\n".'E-Mail : '.$email."\n".'Ville : '.$ville."\n".'Téléphone : '.$telephone."\n \n".'Objet : '.$objet."\n".'Message : '.$message, $headers)) {
    			return '<p class="okmessage">'.$this->getOption('messagesent').'</p>'."\n";    // ---- on ajoute les noms, prenoms, mail, telephone et ville postal dans le texte du mail. "\n" indique un saut de ligne,   ' ' permet de mettre en espace entre 2 variables
        } else {//Il y a un probleme
          $err_formulaire = $err_messagesent = true;
        };
      }
    }; // fin du if (!isset($_POST['envoi']))
    if (($err_formulaire) || (!isset($_POST['envoi']))) {
			if ($err_formulaire) {
        if ($err_nom)	self::$cms->msgShow($this->get_message('err_nom'),false);
        if ($err_email)	self::$cms->msgShow($this->get_message('err_email'),false);
        if ($err_message)	self::$cms->msgShow($this->get_message('err_message'),false);
        if ($err_telephone)	self::$cms->msgShow($this->get_message('err_telephone'),false);
        if ($err_messagesent) self::$cms->msgShow($this->get_message('err_messagesent'),false);
			}
        // afficher le formulaire
      $out .= '<form id="contact" method="post" '.($this->getOption('form_action')?'action="'.$this->getOption('form_action').'"':'').">\n";
      $out .= '    <fieldset><legend>'.$this->get_message('coordonnees').'</legend>'."\n";

			if ($this->getOption('showname')){	/*On affiche le champ nom*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="nom">'.$this->get_message('nom').'</label>'."\n";
        $out .= '            <input type="text" id="nom" name="nom" value="'.$nom.'" tabindex="1" />'."\n";
        $out .= '        </p>'."\n";
			}
			if ($this->getOption('showfirstname')){	/*On affiche le champ prenom*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="prenom">'.$this->get_message('prenom').'</label>'."\n";
        $out .= '            <input type="text" id="prenom" name="prenom" value="'.$prenom.'" tabindex="2" />'."\n";
        $out .= '        </p>'."\n";
			}
			if ($this->getOption('civility')){	/*On affiche le champ civilité*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="civilite">'.$this->get_message('civilite').'</label>'."\n";
        $out .= '			   <input type="radio" id="civilite" name="civilite" value="'.stripslashes($this->get_message('monsieur')).'" '.($civilite==$this->get_message('monsieur')?'checked':'').' tabindex="3" /> '.$this->get_message('monsieur')."\n";
				$out .= '			   <input type="radio" id="civilite" name="civilite" value="'.stripslashes($this->get_message('madame')).'" '.($civilite==$this->get_message('madame')?'checked':'').' tabindex="3" /> '.$this->get_message('madamme')."\n";
	      $out .= '        </p>'."\n";
			}

      $out .= '        <p>'."\n";
      $out .= '            <label for="email">'.$this->get_message('email').'</label>'."\n";   
			$out .= '            <input type="text" id="email" name="email" value="'.$email.'" tabindex="4" />'."\n";
			$out .= '        </p>'."\n";
			
			 $out .= '        <p>'."\n";
      $out .= '            <label for="ville">'.$this->get_message('ville').'</label>'."\n";   // ---- on rajoute un champ ville postal
			$out .= '            <input type="text" id="ville" name="ville" value="'.$ville.'" tabindex="4" />'."\n";
			$out .= '        </p>'."\n";
						
			 $out .= '        <p>'."\n";
      $out .= '            <label for="telephone">'.$this->get_message('telephone').'</label>'."\n";   // ---- on rajoute un champ telephone
			$out .= '            <input type="text" id="telephone" name="telephone" value="'.$telephone.'" tabindex="5" />'."\n";
			$out .= '        </p>'."\n";
			
			$out .= '    </fieldset>'."\n";
      $out .= '    <fieldset><legend>' . $this->get_message('message') . '</legend>'."\n";
			if ($this->getOption('showobject')){	/*On affiche le champ objet*/
				$out .= '        <p>'."\n";
        $out .= '            <label for="objet">'.$this->get_message('objet').'</label>'."\n";
        $out .= '            <input type="text" id="objet" name="objet" value="'.$objet.'" tabindex="6" />'."\n";
        $out .= '        </p>'."\n";
			}
      $out .= '        <p>'."\n";
      $out .= '            <label for="message" style="vertical-align:top"	>'.$this->get_message('corps').'</label>'."\n";
      $out .= '            <textarea id="message" name="message" tabindex="7"'.($this->getOption('width')>0?' cols="'.$this->getOption('width'):'').'" rows="'.$this->getOption('length').'">'.$message.'</textarea>'."\n";
      $out .= '        </p>'."\n";
      $out .= '    </fieldset>'."\n";
			self::$cms->doevent(eCaptcha,eBefore,$out,true);
      $out .= '    <div style="text-align:center;"><input type="submit" name="envoi" value="'.$this->get_message('envoyer').'" /></div>'."\n";
      $out .= '</form>'."\n";
    	};
		return $out;
	}
}
?>

Merci

Hors ligne

#6 21/06/2013 00:37:58

jpg
Administrateurs
Inscription : 19/11/2008
Messages : 2 086
Site Web

Re : Module contact - apostrophe dans objet et nom

Bonsoir,

Vous pouvez essayer de regarder avec la dernière version du module contact (la v1.3) disponible
comme d'habitude sur le site officiel ou directement depuis le menu Module de votre Ziteplus (sauf chez Free ou il faut installer manuellement le module)

a+
Jean-Paul

Hors ligne

Pied de page des forums