Accents et caractères spéciaux PHP

Fermé
Sandriine Messages postés 1255 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 18 août 2010 - 7 juil. 2010 à 16:43
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 - 10 juil. 2010 à 00:15
Bonjour,

Sur mon site, j'ai un formulaire que l'utilisateur remplit, et dont les données sont envoyées sur une base MySQL. Ces données sont ensuite affichées sur le site.
Comment faire pour que les accents et les caractères spéciaux soient correctement affichés ?

Je ne m'en sors pas avec toutes les fonctions à connaitre : htmlentities, addslashes, stripslashes, htmlspecialchars...

Merci de m'éclairer sur ces fonctions.
- Quoi utiliser lorsqu'on envoi des données en POST vers une base de données,
- Quoi utiliser pour afficher des données issues de la base de données,
- Quoi utiliser lorsqu'on affiche un formulaire pré-rempli
A voir également:

6 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
Modifié par avion-f16 le 8/07/2010 à 17:15
C'est pour ça que PHP a une option "magic_quote_gpc".
Cette directive permet d'appliquer la fonctiona addslashes sur toutes les données GPC (GET, POST, COOKIE), donc tu devras quand même faire un stripslashes. Le gros désavantage, c'est que tous les serveurs n'ont pas cette option activée, et toutes les données GPC n'ont pas forcément besoin d'être enregistrées dans une base SQL. Dans ce cas, le développeur doit faire des stripslashes. Cette fonction est obsolète depuis PHP 5.3.0 et sera supprimée en PHP6, je te conseil donc de travailler sans cette option, et annuler son effet si ton serveur l'a activé (cf. ici).

Avec la méthode PDO::quote, tu n'as pas besoin de faire un stripslashes, ni de mettre des guillemets dans tes requêtes.

Exemple :
<?php 
$pdo = new PDO('mysql:host=localhost;dbname=ta_base','root',''); 

$nom = $pdo->quote($_POST['nom']); 
$prenom = $pdo->quote($_POST['prenom']); 
$age = (int) $_POST['age']; 

$sql = 'INSERT INTO membres( 
    nom, 
    prenom, 
    age 
) VALUES( 
    '.$nom.', 
    '.$prenom.', 
    '.$age.')'; 

$pdo->exec($sql); 
?>

Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
3
cddu33 Messages postés 1269 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 8 septembre 2015 256
7 juil. 2010 à 16:47
on utilise addslach pour eviter l'insertion de code malveillant dans la base de donné.

donc
avant l'envoi des donné a la base de donné, on met addslah puis quand tu veu recupérer les donné tu met stripslach
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
7 juil. 2010 à 17:37
Salut.

addslahes est à utiliser lors d'une requête "INSERT INTO", pour éviter les injections SQL.
Lorsque tu veux afficher le contenu (SELECT champs FROM table), tu dois utiliser stripslashes qui annule l'effet d'addslashes et htmlspecialschars pour éviter les failles XSS.

Perso j'utiliser la classe PDO et la méthode PDO::quote() pour éviter les injections SQL. Je n'ai même pas besoin de faire un stripslashes et dans la requête "INSERT INTO" je ne dois pas mettre de guillemets autour des chaines.


Ton problème d'accent ne vient peut-être pas de là. Vérifie que l'encodage de tes scripts, celui indiqué dans la meta (mets-la si tu n'en as pas) et celui de tes tables soient les mêmes.
0
Sandriine Messages postés 1255 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 18 août 2010 283
8 juil. 2010 à 10:15
Ok mais je trouve ça très lourd et contraignant de devoir faire des addslashes sur chaque données postées lorsqu'on fait un INSERT ou un UPDATE, et de faire des stripslashes à chaque fois qu'on veut afficher des données provenant d'une requête SELECT.

Concernant mes problèmes d'accents je ne comprends absolument pas d'où vient ce problème puisque mes fichiers sont en ISO, la balise meta également...
0
cddu33 Messages postés 1269 Date d'inscription vendredi 11 janvier 2008 Statut Membre Dernière intervention 8 septembre 2015 256
8 juil. 2010 à 12:11
essai de tout codé en utf8
0
Sandriine Messages postés 1255 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 18 août 2010 283
8 juil. 2010 à 14:34
Non je ne vais pas changer tout l'encodage de mon site... Ce n'est pas une solution.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sandriine Messages postés 1255 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 18 août 2010 283
9 juil. 2010 à 10:04
Ok merci je vais me renseigner sur cette méthode.
Avec cette méthode, il faut également désactiver l'option "magic_quote_gpc" ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 503
10 juil. 2010 à 00:15
Si ton hébergeur te le permet, il vaut mieux.
https://www.php.net/manual/fr/security.magicquotes.disabling.php
0