Les apostrophe et les guillemets s'affichent mal

Résolu/Fermé
Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018 - 21 mai 2016 à 12:16
Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018 - 24 mai 2016 à 14:36
Salut à tous j'ai un site et une base de données en UTF-8. Mais je viens de rencontrer un problème, lorsque je rentre un texte avec des ' ou des " dans ma base de données il ne s'affiche pas correctement à la place j'ai des ' ou des 5,5' . J'ai supprimé les ENT_QUOTES UTF-8 pour résoudre le problème des ' et là c'est bon mais les guillemets ne marchent toujours pas et maintenant j'ai des " . Avez-vous des solutions?
Cordialement Airox

2 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
21 mai 2016 à 17:09
'lut, pourrais-tu nous montrer ton code s'il-te-plait? Du moins celui qui fait les requêtes SQL. Au vu du
5,5'
que tu peux apercevoir, je suspecte que ton code laisse place aux injections SQL: tu peux casser une requête ou exécuter du code depuis le(s) champ(s) de texte sur les pages, et ce
5,5'
ressemble fort à un paramètre de
LIMIT
.
Si tu utilises les fonctions commençant par
mysql_
, tu est bon pour refaire tout ton code SQL avec PDO (ou mysqli): l'extension MySQL est obsolète. Si le site est déjà en ligne, on peux tenter une correction "d'urgence"... avant que tu ne refasses quand même le site avec PDO (ou mysqli...).
0
Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018 13
Modifié par Airox le 22/05/2016 à 00:35
Salut je te donnes le code de mes commentaires et tiens le lien de mes tests pour voir plus simplement le problème et merci pour ta réponse: https://www.hostinger.fr/free-eol?utm_source=fri&utm_medium=www&utm_campaign=free_eol
if (isset($sujet))
    $sujet = htmlspecialchars($sujet);
    if (preg_match("#^.+$#", $sujet)) {
        if (!preg_match('#^.{1,50}$#', $sujet)) {
            $erreur_com = "Sujet invalide";
            $validation=1;
        }
    }
    else{
        $erreur_com = "Mettre un sujet";
        $validation=1;
    }
}


if (isset($messages)) {
    $messages = htmlspecialchars($messages);
    if (!preg_match('#^.+#',$messages)) {
        $validation = 1;
        $erreur_com = 'Mettre une description';
    }
}

if (isset($sujet, $messages, $id_pseudo) AND $validation==0){
    $req3 = $bdd->prepare('INSERT INTO commentaires(sujet,messages,id_pseudo,id_produit,date_commentaire) VALUES(:sujet, :messages,:id_pseudo ,:id_produit,CURDATE())');

    $req3->execute(array(

        'sujet' => $sujet,
        'messages' => $messages,
        'id_pseudo' => $id_pseudo,
        'id_produit' => $id_produit

    ));
    $validation_com = "Commentaire envoyé";
}
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018
23 mai 2016 à 20:38
Je constate que tu passes tes champs au
htmlspecialchars
avant l'insertion en base, le ferais-tu après aussi par hasard? En principe, dans la base on insère les données telles quelles, et c'est seulement lors de l'affichage qu'on utilise
htmlspecialchars
.
0
Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018 13
23 mai 2016 à 21:57
Oui c'est bon j'ai réparé le soucis tu avais raison mais c'est mieux de mettre htmlspecialchars avant l'insertion ou lors de l'affichage ? C'est quoi la différence entre avant ou après?
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225 > Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018
Modifié par gravgun le 23/05/2016 à 23:33
En somme, le mettre avant ou après l'insertion ne change rien à part la manière dont est enregistrée ta chaine de caractères: si tu le met avant, les caractères transformés en
"
par ex. seront mis sous cette forme dans la base, et dans l'autre cas il y aura la phrase originale.
En ce qui me concerne je le mettrais après, mais c'est discutable selon les cas.
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
24 mai 2016 à 13:35
Dans l'idéal on utilise htmlspecialchars uniquement à l'affichage dans un document html.
Si tu veux utiliser les données pour les afficher dans un autre format (json, pdf, etc...) l'échappement des caractères de ne sera pas avec htmlspecialchars mais va dépendre du format d'affichage.
0
Airox Messages postés 146 Date d'inscription vendredi 1 août 2014 Statut Membre Dernière intervention 5 novembre 2018 13
23 mai 2016 à 18:43
Personne n'a de solution?
0