Bonsoir,
je sais que le sujet a souvent été traité mais j'ai cherché et je n'ai rien trouvé.
J'espère que vous pourrez m'aider à résoudre ce problème d’envoi des caractères codés par email.
-mes pages sont bien déclarées en utf8
-j'ai modifié mon htaccess pour qu'il en soit de même

Les accents arrivent de cette manière:
l\'idée est de fêter = l'idée est de fêter

Lorsque je contrôle avec outlook mon message arrive codé de la manière suivante:
Alphabet occidental (windows)
Si je change le codage en : Unicode (utf8); les accents s'affichent alors correctement.

Serait ce une piste permettant de comprendre l'origine du problème ?
Merci à ceux qui voudront bien lire jusque la.
amicalement
yan
Salut,

Il ne suffit pas de déclarer que tes pages sont encodées en utf-8, il faut surtout qu'elles le soient réellement à l'enregistrement du document...

tm
salut,
je pense que tu veux parler de l'enregistrement en utf8 sans bom. J'ai aussi vérifié.
merci d'avoir essayé de me répondre
Au delà de la page HTML de ton formulaire, il y a derrière tout un script (PHP ou autre) qui récupère la saisie de l'utilisateur et envoie un email.

Ce script, la fonction ou la classe utilisée, doivent être conçus et configurés pour envoyer et déclarer de l'UTF-8. Difficile de donner des repères génériques, ça va dépendre de chaque script, fonction ou classe...

Comme on dit parfois, RTFM. Smiley cligne
Modifié par fvsch (14 Dec 2012 - 10:41)
merci,
J'ai placé le script au sommet de ma page.


<?php

// Define some constants
define( "RECIPIENT_NAME", "Savoie Rando" );
define( "RECIPIENT_EMAIL", "contact@toto.fr" );
define( "EMAIL_SUBJECT", "Nouvelle Demande" );

// Read the form values
$success = false;
$senderName = isset( $_POST['senderName'] ) ? preg_replace( "/[^\.\-\' a-zA-Z0-9]/", "", $_POST['senderName'] ) : "";
$senderEmail = isset( $_POST['senderEmail'] ) ? preg_replace( "/[^\.\-\_\@a-zA-Z0-9]/", "", $_POST['senderEmail'] ) : "";
$telephone = isset( $_POST['telephone'] ) ? preg_replace( "/[^\ \-0-9]/", "", $_POST['telephone'] ) : "";
$participants = isset( $_POST['participants'] ) ? preg_replace( "/[^\ \-0-9]/", "", $_POST['participants'] ) : "";
$message = isset( $_POST['message'] ) ? preg_replace( "/(From:|To:|BCC:|CC:|Subject:|Content-Type:)/", "", $_POST['message'] ) : "";
$message .= "\n\nNom: $senderName\n\n";
$message .= "\n\nTelephone: $telephone\n\n";
$message .= "\n\nNombre de participants: $participants\n\n";

// If all values exist, send the email
if ( $senderName && $senderEmail && $message ) {
  $recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
  $headers = "From: " . $senderName . " <" . $senderEmail . ">";
  $success = mail( $recipient, EMAIL_SUBJECT, $message, $headers );
}

// Return an appropriate response to the browser
if ( isset($_GET["ajax"]) ) {
  echo $success ? "success" : "error";
} else {
?>
<html>
  <head>
   <meta charset="UTF-8"/>
  </head>

<body class="contact">



<?php if ( $success ) echo "<p>Merci nous vous répondrons dans les plus brefs délais .</p>" ?>
<?php if ( !$success ) echo "<p>Erreur lors de l'envoi. Recommencez.</p>" ?>

 </body>
 </html>
 <?php
}
?>


j'édite le message car j'avais oublié la fonction ajax

// Submit the form via Ajax

function submitForm() {
  var contactForm = $(this);

  // Are all the fields filled in?

  if ( !$('#senderName').val() || !$('#senderEmail').val() || !$('#message').val() ) {

    // No; display a warning message and return to the form
    $('#incompleteMessage').fadeIn().delay(messageDelay).fadeOut();
    contactForm.fadeOut().delay(messageDelay).fadeIn();

  } else {

    // Yes; submit the form to the PHP script via Ajax

    $('#sendingMessage').fadeIn();
    contactForm.fadeOut();

    $.ajax( {
      url: contactForm.attr( 'action' ) + "?ajax=true",
      type: contactForm.attr( 'method' ),
      data: contactForm.serialize(),
      success: submitFinished
    } );
  }

  // Prevent the default form submission occurring
  return false;
}

// Handle the Ajax response

function submitFinished( response ) {
  response = $.trim( response );
  $('#sendingMessage').fadeOut();

  if ( response == "success" ) {

    // Form submitted successfully:
    // 1. Display the success message
    // 2. Clear the form fields
    // 3. Fade the content back in

    $('#successMessage').fadeIn().delay(messageDelay).fadeOut();
    $('#senderName').val( "" );
    $('#senderEmail').val( "" );
    $('#message').val( "" );
    $('#content').delay(messageDelay+500).fadeTo( 'slow', 1 );

  } else {

    // Form submission failed: Display the failure message,
    // then redisplay the form
    $('#failureMessage').fadeIn().delay(messageDelay).fadeOut();
    $('#contactForm').delay(messageDelay+500).fadeIn();
  }
}


Dans dreamweaver, il y a aussi ces options lorsque l'on enregistre la page,pourraient elle servir à quelque chose ? (j'ai essayé la première solution en cochant: include unicode signature (BOM)

C (Canonical Decomposition, followed by Canonical Composition)
D (Canonical Decomposition)
KC (Compatibility Decomposition, followed by Canonical Composition)
KD (Compatibility Decomposition)

a cocher: include unicode signature (BOM)
Modifié par truitas (14 Dec 2012 - 11:21)
Re,

C (Canonical Decomposition, followed by Canonical Composition)
NE PAS inclure de signature BOM

Sinon, pas mieux que Florent, bien vérifier l'encodage de TOUS les fichiers..
Une URL ?

tm
Tu utilises la fonction mail() de PHP. Il me semble que cette fonction est un peu simpliste, elle envoie les données telles quelles (donc a priori le message sera bien envoyé en UTF-8), mais ne gère pas la déclaration du codage de caractères (donc les clients mail vont supposer que c'est de l'ASCII ou de l'ISO-8859-1 par exemple).

Il faut donc spécifier des en-têtes MIME pour déclarer un codage UTF-8.
Quelques pistes:
http://php.net/manual/en/function.mail.php (voir les commentaires)
http://stackoverflow.com/questions/7266935/how-to-send-utf-8-email-php

Et aussi, des généralités sur MIME:
http://en.wikipedia.org/wiki/MIME
merci pour vos réponses,
ça avance les accents s'affichent correctement mais je n'ai pas du mettre les $headers au bon endroit ou selon la bonne syntaxe.
En effet voila ce que je reçois :
TEST MIME-Version: 1.0 [test@accent.fr]
à la place de TEST [test@accent.fr] > MIME-Version: 1.0 s'aafiche parès le nom de l'expéditeur.


La version originale

if ( $senderName && $senderEmail && $message ) {
$recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
$headers = "From: " . $senderName . " <" . $senderEmail . ">"
$success = mail( $recipient, EMAIL_SUBJECT, $message, $headers );
}


la nouvelle = bidouillage
if ( $senderName && $senderEmail && $message ) {
$recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
$headers = "From: " . $senderName . " <" . $senderEmail . ">". "MIME-Version: 1.0" . "\r\n" ."Content-type: text/plain; charset=UTF-8" . "\r\n" . "Content-Transfer-Encoding: 8bit";
$success = mail( $recipient, EMAIL_SUBJECT, $message, $headers );
}


J'ai essayé aussi en ajoutant
"\r\n" .
avant "MIME-Version: 1.0" et cela marche sur : IE, chrome mais pas sur firefox, le ecript m'envoie un message d'erreur.
Si jamais vous avez une idée
Modifié par truitas (18 Dec 2012 - 02:12)
Merci pour ce que vous avez semé....
Tout fonctionne (j'ai des / sur avant les apostrophes mais c'est un moindre mal).
je mets les lignes de code si cela peut servir:

// If all values exist, send the email
if ( $senderName && $senderEmail && $message ) {
$recipient = RECIPIENT_NAME . " <" . RECIPIENT_EMAIL . ">";
$headers .= "From: " . $senderName . " <" . $senderEmail . ">"."\n";
   $headers .='Content-Type: text/plain; charset="utf-8"'."\n"; 
   $headers .= 'MIME-Version: 1.0'."\n"; 
   $headers .='Content-Transfer-Encoding: 8bit';
   $headers .='X-Mailer: PHP/' . phpversion();
$success = mail( $recipient, EMAIL_SUBJECT, $message, $headers );
}

http://www.vulgarisation-informatique.com/mail.php
http://php.net/manual/fr/function.mail.php
http://forums.web4all.fr/topic/7427-resolu-messagerie-via-php/
Modifié par truitas (18 Dec 2012 - 15:47)