Accents et caractères spéciaux PHP
Sandriine
Messages postés
1255
Date d'inscription
Statut
Membre
Dernière intervention
-
avion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
avion-f16 Messages postés 19252 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
- Accents et caractères spéciaux PHP
- Caractère spéciaux - Guide
- Caractères spéciaux - Guide
- Caractères spéciaux mac - Guide
- Caractères ascii - Guide
- Raccourcis clavier word caractères spéciaux pdf - Guide
6 réponses
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 :
Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
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.
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
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
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.
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.
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...
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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Ok merci je vais me renseigner sur cette méthode.
Avec cette méthode, il faut également désactiver l'option "magic_quote_gpc" ?
Avec cette méthode, il faut également désactiver l'option "magic_quote_gpc" ?
Si ton hébergeur te le permet, il vaut mieux.
https://www.php.net/manual/fr/security.magicquotes.disabling.php
https://www.php.net/manual/fr/security.magicquotes.disabling.php