Comment te faire comprendre qu'il n'y a pas besoin de convertir un 'é' en 'é' pour faire afficher un 'é' dans une page codée en UTF-8Pour la deuxième partie de ton message, vue que l'on est en france, les caractères accentués sont utilisés assez souvent dans les Posts, et donc je trouve plus que judicieux de les convertir surtout quand ta page est encodée en UTF-8.
Mais je suis certain, que tu es d'accord avec moi sur ce point maintenant, donc sujet clos pour le htmlentities, enfin si tu le permets évidemment.
<?php
header('Content-Type: text/html; charset=UTF-8');
echo 'Non convertis: éèàù';
echo 'Convertis: ' . htmlentities('éèàù', ENT_QUOTES, 'UTF-8');
?>
Bon et bien les caractères accentués s'affichent bien quand le document est lui-même enregistré en UTF-8 aussi.<?php
$nom=$_POST['nom'];
$email=$_POST['email'];
$sujet=$_POST['sujet'];
$message=$_POST['message'];
// coupe le message en lignes de 70 caractères max
$message=wordwrap($message, 70); //Dans le cas où nos lignes comportent plus de 70 caractères, nous les coupons en utilisant wordwrap()
$destinataire='[email protected]';
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: '.$nom.' <'. $email.' >' . "\r\n";
if(mail($destinataire, $sujet, $message, $headers))
{
header('Location: merci.php');
}
else
{
header('Location: erreur.php');
}
unset($nom, $email, $sujet, $message, $headers) ;
?>
Maintenant, je n'ai plus de problème : Yahoo! affiche correctement les caractères spéciaux et les accents. Pour info, je n'ai modifié que cela : je n'ai pas changé le charset dans .htaccess (qui est utf-8), la BdD est aussi en utf-8.Cool et puis maintenant tu sais comment fonctionne htmlentities...Maintenant, je n'ai plus de problème : Yahoo! affiche correctement les caractères spéciaux et les accents. Pour info, je n'ai modifié que cela : je n'ai pas changé le charset dans .htaccess (qui est utf-8), la BdD est aussi en utf-8.
Bref, tout va pour le mieux... =D>
De cette façon:Seul problème maintenant, comment me protéger du spam ?
$nom=$_POST['nom'];
$email=$_POST['email'];
$sujet=$_POST['sujet'];
$message=$_POST['message'];
Par:
$regex_head = '/[\n\r]/';
$nom = trim(preg_replace($regex_head, '', $_POST['nom']));
$email = trim(preg_replace($regex_head, '', $_POST['email']));
$sujet = trim($_POST['sujet']);
$message = trim($_POST['message']);
Tout en gardant à l'esprit que le mieux étant à mon avis de filtrer plus strictement les $_Post, pour cela je te conseil de regarder du côté de preg_match() et preg_replace()...Comment éviter l'insertion de code html via les champs à remplir ?
Sinon regarde par exemple ici:Est-il nécessaire de me prémunir contre les injections SQL sachant que je n'ai pas mis de code pour me conecter à la BdD ?
$nom=$_POST['nom'];
$email=$_POST['email'];
$sujet=$_POST['sujet'];
$message=$_POST['message'];
Par:
$regex_head = '/[\n\r]/';
$nom = trim(stripslashes(preg_replace($regex_head, '', $_POST['nom'])));
$email = trim(stripslashes(preg_replace($regex_head, '', $_POST['email'])));
$sujet = trim(stripslashes($_POST['sujet']));
$message = trim(stripslashes($_POST['message']));
Ps:Ce qui expliquerai les antishash...Lorsque magic_quotes est activé, tous les caractères ' (guillemets simples), " (guillemets doubles), \ (antislash) et NUL sont échappés avec un antislash.
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
$regex_head = '/[\n\r]/';
$nom = trim(preg_replace($regex_head, '', Verif_magicquotes($_POST['nom'])));
$email = trim(preg_replace($regex_head, '', Verif_magicquotes($_POST['email'])));
$sujet = trim(Verif_magicquotes($_POST['sujet']));
$message = trim(Verif_magicquotes($_POST['message']));
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
$regex_array = array('\r\n', '\n', '\r');
$nom = trim(Verif_magicquotes(str_replace($regex_array, '', $_POST['nom'])));
$email = trim(Verif_magicquotes(str_replace($regex_array, '', $_POST['email'])));
$sujet = trim(Verif_magicquotes($_POST['sujet']));
$message = trim(Verif_magicquotes($_POST['message']));
Ca fonctionne beaucoup mieux maintenant...
ça fonctionne moyen voir pas pour ce qui est de la protection des injections de retours lignesCa fonctionne beaucoup mieux maintenant...function Verif_magicquotes ($chaine) { if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine); return $chaine; } $regex_array = array('\r\n', '\n', '\r'); $nom = trim(Verif_magicquotes(str_replace($regex_array, '', $_POST['nom']))); $email = trim(Verif_magicquotes(str_replace($regex_array, '', $_POST['email']))); $sujet = trim(Verif_magicquotes($_POST['sujet'])); $message = trim(Verif_magicquotes($_POST['message']));
Ps: m'apprendra a ne pas tester...
$regex_array = array("\r\n", "\n", "\r");
pour les mêmes raisons que j'écrivais avec des doubles quotes
function Protege_header($value)
{
$value = str_replace("\n", "", str_replace("\r", "", $value));
return $value;
}
Relis ce que j'en disais plus haut function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
function Protege_header($value)
{
$value = str_replace("\n", "", str_replace("\r", "", $value));
return $value;
}
$nom = trim(Protege_header(Verif_magicquotes($_POST['nom'])));
$email = trim(Protege_header(Verif_magicquotes($_POST['email'])));
$sujet = trim(Verif_magicquotes($_POST['sujet']));
$message = trim(Verif_magicquotes($_POST['message']));
Et puis réfléchis à deux fois avant de me dire (comme dans le post que tu as supprimé) que la fonction stripslashes va supprimer les \ des caractères invisibles de retour ligne "\n" ou "\r" sinon <?php
header('Content-Type: text/html; charset=UTF-8');
$text = $_POST['envoye'];
$regex_array = array('\r\n', '\n', '\r');
$regex_array2 = array("\r\n", "\n", "\r");
$nom = $text;
$nom2 = trim(str_replace($regex_array2, '', $text));
$nom3 = trim(str_replace($regex_array, '', $text));
if (isset($_POST['envoye'])) {
echo 'en clair: ';
var_dump($nom);
echo 'ta methode: ';
var_dump($nom2);
echo 'la mienne: ';
var_dump($nom3);
}
?>
<form action="#" method="post">
<table summary="Free IP INFO">
<tr>
<td><input type="radio" name="envoye" value='ggg\r\ncxc' onclick="submit();" /><b>Ok</b> </td>
</tr>
</table>
</form>
Tu véras que ce qui est reçue au moment du Post est en clair, et non exécuté, un conseil met à jour tous tes formulaires mails
Ryle et Zeus ne t'ont pas tout dis...Bon tu as l'air de t'énerver, mais maintenant je prend un peu de temps pour tester...
Il est logique d'utiliser les simples guillemets, prend un peu de distance...
J'ai essayé de t'expliquer mais bon...
Bien c'est pas compliqué -> Démonstration:Tu véras que ce qui est reçue au moment du Post est en clair, et non exécuté, un conseil met à jour tous tes formulaires mails<?php header('Content-Type: text/html; charset=UTF-8'); $text = $_POST['envoye']; $regex_array = array('\r\n', '\n', '\r'); $regex_array2 = array("\r\n", "\n", "\r"); $nom = $text; $nom2 = trim(str_replace($regex_array2, '', $text)); $nom3 = trim(str_replace($regex_array, '', $text)); if (isset($_POST['envoye'])) { echo 'en clair: '; var_dump($nom); echo 'ta methode: '; var_dump($nom2); echo 'la mienne: '; var_dump($nom3); } ?> <form action="#" method="post"> <table summary="Free IP INFO"> <tr> <td><input type="radio" name="envoye" value='ggg\r\ncxc' onclick="submit();" /><b>Ok</b> </td> </tr> </table> </form>
Car ta méthode avec les doubles guillemets ne sert a rien du tout...
[EDIT]
Oups j'oubliais: non met![]()
[EDIT2]
Ryle et Zeus m'avaient fais un super Topo sur les guillemets, ce n'est pas pour rien
if (strpos($variable, "\n") !== false) echo '\n trouvé';
Je ne m'énerve pas, mais bon niveau "distance" comme tu dis... justement tu n'a pas assez de recul ou de connaissances suffisantes pour pouvoir parler de php sans réfléchir un peu plus que maintenant T'as du oublier un ou deux o à grosses lacunessur php tu as de grooosses lacunes qu'il te sera d'autant plus long à combler que tu réponds du tac au tac sans connaître les subtilités du langage.
Avant de savoir encore faut-il apprendre. Après peut-être tu pourras m'expliquer
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
return $chaine;
}
$regex_array = array(chr(13).chr(10), chr(10), chr(13));
$nom = trim(Verif_magicquotes(str_replace($regex_array, '', $_POST['nom'])));
$email = trim(Verif_magicquotes(str_replace($regex_array, '', $_POST['email'])));
$sujet = trim(Verif_magicquotes($_POST['sujet']));
$message = trim(Verif_magicquotes($_POST['message']));