Problème d'accents en PHP

Petit nouveau ! | 4 Messages

16 mars 2012, 18:06

Bonjour,

J'ai un souci avec un script de récupération mail en PHP! Après envoi, les lettres accentuées dans la partie $message sont transformées. Je sais que c'est un problème d'encodage. Quelqu'un peut m'aider svp !

Voici le script :

<?php

define("WEBMASTER_EMAIL", '[email protected]');

error_reporting (E_ALL ^ E_NOTICE);

function ValidateEmail($email)
{
$regex = '/([a-z0-9_.-]+)'.
'@'.
'([a-z0-9.-]+){2,255}'.
'.'.
'([a-z]+){2,10}/i';

if($email == '')
return false;
else
$eregi = preg_replace($regex, '', $email);
return empty($eregi) ? true : false;
}

$post = (!empty($_POST)) ? true : false;

if($post)
{
$name = stripslashes($_POST['name']);
$email = trim($_POST['email']);
$subject = stripslashes($_POST['subject']);
$message = stripslashes($_POST['message']);

$error = '';

if(!$name || $name == "Name*")
$error .= 'Veuillez indiquer votre nom.<br />';

if(!$email || $email == "Email*")
$error .= 'Veuillez indiquer votre adresse email.<br />';

if($email && !ValidateEmail($email))
$error .= 'Adresse email invalide.<br />';

if(!$message)
$error .= "Veuillez entrer un message avant de poster.<br />";

if(!$error)
{
$mail = mail(WEBMASTER_EMAIL, $subject, $message,
"From: ".$name." <".$email.">\r\n"
."Reply-To: ".$email."\r\n"
."X-Mailer: PHP/" . phpversion());

if($mail)
echo 'OK';
}
else
echo '<div class="formstatuserror">'.$error.'</div>';
}

?>

Merci d'avance

Eléphant du PHP | 418 Messages

17 mars 2012, 05:51

Si tu veux qu'on t'aide au mieux, agence mieux ton poste

Déjà tu nous explique vaguement ton problème (passe encore) mais tu nous met ton code à la rache et ça, j'en connais pas beaucoup qui aimerais lire comme ça ton code ^^

En plus ton code n'est pas commenté, et nous on peux pas deviner à quoi sert tel ligne Oo

Donc je te conseil de rééditer ton poste ou d'en mettre un à la suite, qui présenterais mieux ton problème.

Tu parles à des gens, pas à un ordinateur, et nous on à besoin de plus de chaleur dans les discutions ^^

Cordialement

Mammouth du PHP | 2278 Messages

17 mars 2012, 07:05

J'ai commencé par sauter le code, mais:
à propos de
error_reporting (E_ALL ^ E_NOTICE);
j'aimerais savoir quel type d'erreurs on s'attend à voir signalées.
à cette fin:
<?PHP
	$z=32767 ^1024;
	print "$z";
?>

puis
if($email == '')
return false;
else
$eregi = preg_replace($regex, '', $email);
return empty($eregi) ? true : false;
} 
m'a agressé par une présentation pour le moins illisible :
Il m'a fallu l'éditer pour voir les limites physiques de la fonction
function ValidateEmail($email)
{
	$regex = '/([a-z0-9_.-]+)'.'@'.'([a-z0-9.-]+){2,255}'.'.'.'([a-z]+){2,10}/i';

	if($email == '')
		return false;
	else
		$eregi = preg_replace($regex, '', $email);
		return empty($eregi) ? true : false;
}
Entre autres:
étrange conception du test, mais il fonctionne peut-être. (preg_match est la première idée que j'ai eue). Encore que je doute qu'il y ait des adresses du genre décrit par ([a-z]+){2,10}.
plusieurs points de sortie.
Je trouve plus lisible d'utiliser une variable $resultat qu'on passe à true ou false, et un seul return $resultat
de multiples erreurs de syntaxe, plus faciles encore à repérer si on met
error_reporting(E_ALL);
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 418 Messages

17 mars 2012, 07:35

Ca nous aide toujours pas à t'aider.

Précise dans quel cas tu utilise ce script 'enregistrement de membre, page de contact ...)

Ensuite définit dans quel cas ton erreur se produit.

Et ensuite explique nous avec ton code, ce que tu dois en faire exactement

Merci ^^

Cordialement

Petit nouveau ! | 4 Messages

17 mars 2012, 09:36

Je m'excuse de mon post un peu confus, je l'avoue ! Il s'agit d'un script de récupération mail pour une page contact, qui fonctionne en PHP & Ajax. 'OK' transmet à ma page HTML le message suivant :

<script type="text/javascript">

$(document).ready(function(){
$("#contact-form").submit(function(){
var str = $(this).serialize();
$.ajax({
type: "POST",
url: "contact.php",
data: str,
success: function(msg)
{
$("#formstatus").ajaxComplete(function(event, request, settings){
if(msg == 'OK'){
result = '<div class="formstatusok">Votre message a bien &eacute;t&eacute; envoy&eacute;.</div>';
$("#fields").hide();
}
else{
result = msg;
}
$(this).html(result);
});
}

});
return false;
});
});

</script>

Et ça marche parfaitement ! Les accents paraissent dans le $subject, c'est dans $message que ça coince ?!Faudrait insérer Content-type dans la partie qui suit, mais je ne sais pas comment l'écrire! J'ai essayé aisni, mais ça ne marche pas :

$mail = mail(WEBMASTER_EMAIL, $subject, $message,
"From: ".$name." <".$email.">\r\n"
."Reply-To: ".$email."\r\n"
."Content-type: text/html; charset=iso-8859-1' . \r\n"
."X-Mailer: PHP/" . phpversion());
Modifié en dernier par kenzzzi le 17 mars 2012, 09:53, modifié 3 fois.

Petit nouveau ! | 4 Messages

17 mars 2012, 09:42

@sirakawa : Le fichier apache/php.ini contient :

; Common Values:
; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.)
; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices)
; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE _ERROR (Show only errors)
; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.)
; Default Value: E_ALL & ~E_NOTICE
; Development Value: E_ALL | E_STRICT
; Production Value: E_ALL & ~E_DEPRECATED
; http://php.net/error-reporting
error_reporting = E_ALL | E_STRICT

Par (E_ALL ^ E_NOTICE) je voulais afficher que l'intitulé de l'erreur (toutes les erreurs).
Modifié en dernier par kenzzzi le 17 mars 2012, 09:50, modifié 2 fois.

Eléphant du PHP | 418 Messages

17 mars 2012, 09:45

tu peux mettre les balises pour définir un peux plus clairement le code

Code : Tout sélectionner

[code]ton code ^^
[/code]
utilise une librairie comme PhpMailer pour envoyer des courriels.

C'est un peux difficile au début à mettre en place, mais tu pourras aisément envoyer des courriels paramètres le format de tes courriels, ainsi que permettre les fichiers joints, et ce en définissant quelque paramètres.

En espérant que ça résoudra tes soucis ^^

Par contre je préfère le format utf-8, plus récent, et permet d'être lu sur de nombreux explorateurs sans soucis.

Petit nouveau ! | 4 Messages

17 mars 2012, 09:52

Merci de ta suggestion Fre3z69, je note ;)

Eléphant du PHP | 418 Messages

17 mars 2012, 10:24

J'ai eu un soucis en local pour tester les email, avec les restrictions d’accès des serveur SMTP.
Du coup je me suis retrancher sur ça, et j'avoue c'est fonctionnel à 100% et paramétrable à souhait ^^