problème lors d'une recherche en SQL et caractères spéciaux

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par fraid26, 9 Août 2011.

  1. fraid26
    fraid26 WRInaute discret
    Inscrit:
    3 Octobre 2008
    Messages:
    123
    J'aime reçus:
    0
    Bonjour à tous !

    Pour enregistrer mes champs dans ma BDD je les traite avec un htmlentities() de php.
    Jusque là tout va bien.

    Par contre lorsque je fais une recherche cela me pose problème :

    par exemple je cherche les prénoms qui contiennent "ea", ma requête va me retourner tous les prénoms avec un "é" car il est écrit dans la bdd "é" donc contenant "ea"... Auriez vous une idée sur comment je pourrais traiter cela (une fonction sql ?) ??

    Merci d'avance !

    Frédéric
     
  2. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Salut,

    Non, il n'y a pas de fonction pour faire ça puise que mysql n'a pas de rapport direct avec html.

    Pourquoi insérer les champs encodés ?
    Une solution serait de décoder l'ensemble des champs dans la bdd. C'est une grosse base ?
     
  3. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 170
    J'aime reçus:
    344
    Non, tu as tord.
    Il ne faut pas enregistrer les entités HTML en BDD, il faut juste utiliser htmlentities à l'affichage.
    Et ton problème ne serait pas là.
     
  4. fraid26
    fraid26 WRInaute discret
    Inscrit:
    3 Octobre 2008
    Messages:
    123
    J'aime reçus:
    0
    OK je vois mieux... je pensais que le htmlentities aider aussi à lutter contre les injections !
    du coup je suppose qu'il faut plutôt que j'utilise mysql_real_escape_string ?

    Je peux décoder l'ensemble de la base, elle est petite pour le moment. Par contre il me faut recoder l'ensemble de mes pages avec des htmlentities au moment de l'affichage pour le client... et ça, ça fait du boulot !

    Merci de votre aide !
     
  5. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Si tu utilises le même charset sur la bdd et sur le site (ce qui devrait être le cas), tu n'as pas besoin d'ajouter des htmlentities à tout va..

    mysql_real_escape_string va ajouter des \ devant les ' et ", ça limite les injections mais ça ne fait pas tout ;)
     
  6. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 170
    J'aime reçus:
    344
    J'utilise htmlentities à l'affichage pour que par exemple le & commercial se transforme bien en &, pas du tout pour éviter un problème de charset.
    Pour éviter de devoir mettre toutes les vues à jour, rien n’empêche d'appliquer un htmlentities à tous les champs après la lecture SQL.
     
  7. fraid26
    fraid26 WRInaute discret
    Inscrit:
    3 Octobre 2008
    Messages:
    123
    J'aime reçus:
    0
    oui c'est ce que je vais faire, une boucle sur les colonnes, mais j'ai un grand nombre de pages et de requettes... c'est pour ça que c'est embêtant !
     
  8. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Pour les caractères spéciaux, oui bien sûr, mais l'exemple de fraid26 porte sur les accents et à mon sens il n'y a pas d’intérêt a les encoder.
     
  9. poulpe
    poulpe WRInaute discret
    Inscrit:
    29 Juin 2004
    Messages:
    88
    J'aime reçus:
    0
    tu dois toujours echapper ce que tu affiches et provient d une base, puisque tu ne sais pas a l avance ce qu il s y touve. On peut bien y glisser du js par exemple, et la c est la catastrophe pour toi.
     
  10. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Pour "y glisser" du js il faut que ce soit possible, plutôt que d'échapper tout ce qui sort de la bdd il ne serait pas plus judicieux de contrôler ce qui y rentre ?
     
  11. poulpe
    poulpe WRInaute discret
    Inscrit:
    29 Juin 2004
    Messages:
    88
    J'aime reçus:
    0
    Je ne dis pas qu il faut pas valider ce qui rentre, mais il faut echapper ce qui sort egalement.
    ou alors si je veux poster un commentaire disant '3 < 5' par exemple je peux pas car tu vas interdire le caractere '<'

    c est un peu plus developpe ce que j explique:
    http://www.lazycat.org/php-output-escaping.html
     
  12. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Pour afficher 3 < 5 il suffit lors de l'insertion dans la bdd d'inserer 3 &lt; 5 (avec htmlentities). Tous les navigateurs afficheront correctement le symbole.

    Je ne comprend pas pourquoi tu dis "par exemple je peux pas car tu vas interdire le caractere '<' " ?
     
  13. poulpe
    poulpe WRInaute discret
    Inscrit:
    29 Juin 2004
    Messages:
    88
    J'aime reçus:
    0
    donc si tu utilises htmlentites a l insertion du champ du formulaire, tu te retrouves avec le probleme evoque dans le premier post: des accents transformes et une recherche qui marche plus.
     
  14. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    pas obligé : il suffit de faire un str_replace(array(">","<"),array("&gt;","&lt;"),$content) et le tour est joué :wink:
     
  15. poulpe
    poulpe WRInaute discret
    Inscrit:
    29 Juin 2004
    Messages:
    88
    J'aime reçus:
    0
    Salut.
    c est sur ca marche, mais si un jour par exemple tu veux exporter ta base dans un excel ou autre format qui ne comprend pas les entites html, ben tu vas devoir modifier encore une fois tout ton fichier. A mon sens il est plus simple de garder le contenu original, et le modifier a la volee.
     
Chargement...
Similar Threads - problème recherche SQL Forum Date
Problème d'accent dans les recherches MySQL Administration d'un site Web 16 Mars 2007
[SQL] Moteur de recherche, petit problème Développement d'un site Web ou d'une appli mobile 6 Novembre 2006
Probleme Moteur de recherche mysql Administration d'un site Web 4 Décembre 2004
Search Console Problème de version de langue dans les résultats de recherche Google Référencement international (langues, pays) 17 Juin 2021
Problème langue sur la recherche google Problèmes de référencement spécifiques à vos sites 11 Octobre 2018
Problème volumes de recherche dans Keyword planner AdWords 14 Janvier 2017
Nom de domaine .fr et .ch, problème dans les résultats de recherche Référencement international (langues, pays) 21 Juin 2016
Moteur de recherche interne, est ce un problème ? Débuter en référencement 30 Septembre 2015
Problème et mauvaise détection automatique de recherche Google Problèmes de référencement spécifiques à vos sites 9 Juillet 2013
problemes de mots clés /résultats de recherches Problèmes de référencement spécifiques à vos sites 11 Avril 2013
Dreamweaver problème avec "rechercher dans tout le site" Développement d'un site Web ou d'une appli mobile 18 Janvier 2011
problème d'accents dans résultats de recherche google Crawl et indexation Google, sitemaps 2 Octobre 2009
problemes description de mon site page recherche google Crawl et indexation Google, sitemaps 8 Juin 2009
Problème avec accents dans moteur de recherche perso Développement d'un site Web ou d'une appli mobile 27 Mai 2009
Problème bizarre dans les recherches... Problèmes de référencement spécifiques à vos sites 9 Janvier 2009
Problème d'affichage dans le moteur de recherche Google Crawl et indexation Google, sitemaps 4 Décembre 2008
Problème moteur de recherche interne Développement d'un site Web ou d'une appli mobile 11 Mars 2008
Google recherche personnalisé problème d'UTF8 Google : l'entreprise, les sites web, les services 10 Mars 2008
Problème d'encodage de liens vers une recherche google map Développement d'un site Web ou d'une appli mobile 20 Novembre 2007
Problème Mot clé dans recherche Google Problèmes de référencement spécifiques à vos sites 19 Novembre 2007