Afficher lettres avec accent correctement php

Fermé
founzo Messages postés 17 Date d'inscription jeudi 23 avril 2009 Statut Membre Dernière intervention 17 novembre 2017 - Modifié le 17 nov. 2017 à 20:48
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 17 nov. 2017 à 21:13
Bonsoir à tous, j'ai créer un formulaire sur une page contact.php et une autre page traitement.php pour récupérer les messages (par mail) que les visiteurs laisseront sur mon site.
Le soucis est que je reçois bien le mail mais les lettres avec accents (éàü...) s'affichent assez bizarrement et avec beaucoup de points d’interrogation. je vous envoie le code de la page traitement.php, merci d'avance:


<?php 
  $name_error = $email_error = "";
  $name = $email = $phone = $message = $success = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
  $name_error = "Nom & Prénoms Obligatoires!";
  } else {
  $name = test_input($_POST["name"]);
  if (!preg_match("/^[\pL\pM\p{Zs}.-]+$/u",$name)) {
  $name_error = "Seul les Lettres sont autorisées"; 
     }
      }

  if (empty($_POST["email"])) {
  $email_error = "Adresse Mail Obligatoire!";
  } else {
  $email = test_input($_POST["email"]);
  if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  $email_error = "Format d'Adresse Mail Invalide!"; 
     }
      }
     
  if (empty($_POST["message"])) {
     $message = "";
  } else {
     $message = test_input($_POST["message"]);
      }

  if ($name_error == '' and $email_error == '' ){
  $message_body = '';
  unset($_POST['submit']);
  foreach ($_POST as $key => $value){
  $message_body .=  "$key: $value\n";
       }

  $to = 'monmail@enfin.ouf';
  $subject = 'Message Provenant du Site Internet';
  if (mail($to, $subject, $message_body)){
  $success = "Message envoyé, nous vous contacterons très bientôt";
  $name = $email = $message = '';
       }
      }

    }

    function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
    }
  ?>

2 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 331
17 nov. 2017 à 20:50
Probablement un souci d'encodage.
Si tu passe par une base de données, pense à mettre le champ en UTF-8 ou UTF8mb4 et le préciser sur la connexion via PHP.
Pour l'affichage, encode tes fichiers source en UTF-8 (option de ton éditeur de texte) et envoie l'encodage via la balise header.
0