Vous n'êtes pas identifié(e).
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 pour me dire quel morceau de code ajouter pour résoudre ce problème?
Merci d'avance
Cordialement
Mick
Hors ligne
J'ai fini par trouver (en plus quand on travaille sur le même fichier que celui qu'on transfert ça aide ).
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
Hors ligne
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
Bonjour bernquel,
Je découvre un peu tard ton message.
As-tu trouvé une solution? Sinon peut-être qu'en voyant ton code...
Hors ligne
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(''',"'",$message);
$message = str_replace('’',"'",$message);
$objet = str_replace(''',"'",$objet);
$objet = str_replace('’',"'",$objet);
$ville = str_replace(''',"'",$ville);
$ville = str_replace('’',"'",$ville);
$nom = str_replace(''',"'",$nom);
$nom = str_replace('’',"'",$nom);
$prenom = str_replace(''',"'",$prenom);
$prenom = str_replace('’',"'",$prenom);
$signature = str_replace(''',"'",$signature);
$signature = str_replace('’',"'",$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
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