IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Gestion des accents dans moteur de recherche


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 103
    Points : 44
    Points
    44
    Par défaut Gestion des accents dans moteur de recherche
    Bonjour à tous,

    Étant monté à 48° de température interne, j'me dois d'abdiquer et de demander conseil.

    Je fais un moteur de recherche pour mon site. Je souhaiterai trouver le mot"cérémonie" lorsque je tape le mot "ceremonie" ... mais bon voilà j'ai lu les regexp, fais des tests, avancer, reculer, me suis perdu 3 fois ...et suis arrivé ici...

    Bref un ptit coup de main pour la gestion des accents dans le resultat de ma requête ne serait pas de refus...
    Un grand Merci.
    Karpe,

    Mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    $nombre = 20;  
    // si limite n'existe pas on l'initialise à zéro
    if (!$limite) $limite = 0; 
    // on cherche le nom de la page.    
    $path_parts = pathinfo($_SERVER['PHP_SELF']);
    $page = $path_parts["basename"];
    //=========================================    
    // connection à la DB
    //=========================================
     
    $link = mysql_connect("$host", "$username", "$password");
    mysql_select_db ("$db_name");
     
     
    $recherche = mysql_real_escape_string(htmlspecialchars($_POST['recherche'])); //sécurisation des variables
     
    //$recherche = str_replace(array('é', 'è', 'ê'), 'e', $recherche);
    //function delaccents($chaine){
     //   $chaine = ereg_replace('[àâäåãáÂÄÀÅÃÁæÆ]','a', $chaine);
     //   $chaine = ereg_replace('[çÇ]','c', $chaine);
    //    $chaine = ereg_replace('[éèêëÉÊËÈ]','e', $chaine);
     //   $chaine = ereg_replace('[ïîìíÏÎÌÍ]','i', $chaine);
     //   $chaine = ereg_replace('[ñÑ]','n', $chaine);
     //   $chaine = ereg_replace('[öôóòõÓÔÖÒÕ]','o', $chaine);
     //   $chaine = ereg_replace('[ùûüúÜÛÙÚ]','u', $chaine);
     //   $chaine = ereg_replace('[ÿ]','y', $chaine);
     //   return $chaine;
    //}
     
    $categorie = $_POST['categorie']; //sécurisation des variables
    $localisation = $_POST['localisation']; //sécurisation des variables
     
    $empty=1;			  
    if ($categorie && $empty)
    {
    $selecat = "AND categorie='$categorie'";
    }
    else
    {
    $selecat = "";
    }
     
     
     
    if ($localisation == $_GET['id_region'])
    {
    $selecloc = "AND region='$localisation'";
    }	
    //si localisation est egal à idregion = affiche region
     
    elseif (($localisation == $_GET['f'])  && (!($localisation == '')) && (!($localisation == $_GET['id_region'])))
    {
    $selecloc = "";
    }
    //ou sinon localisation est egal à f et n'est pas vide = affiche france
     
    elseif ((!($localisation == $_GET['id_region'])) && (!($localisation == '')))
    {
    $selecloc = "AND departement='$localisation'";
    } 
    //ou sinon localisation n'est pas egal à idregion et n'est pas vide = affiche departement
     
    elseif ($localisation == '')
    {
    $selecloc = "AND region='". $_GET['id_region']. "'";
    }
    // si rien de tout ca on affiche la region 
     
     
     
     
    $and_ou_or = 'AND'; //on utilisera AND dans la boucle
     
     
    $mots = explode(" ", $recherche); //séparation des mots
     
    $nombre_mots = count ($mots); //compte le nombre de mots
    $valeur_requete = '';
    for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
    {
    $valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
    }
    $valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
    //=========================================    
    // requ&ecirc;te SQL qui compte le nombre total 
    // d'enregistrements dans la table.
    //=========================================
    $select = "SELECT count(idannonce) FROM annonces WHERE $valeur_requete $selecat $selecloc AND statut='oui' " ;
    $result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
    $row = mysql_fetch_row($result);
    $total = $row[0];
    //=========================================
    // v&eacute;rifier la validit&eacute; de notre variable 
    // $limite;
    //=========================================
    $verifLimite= verifLimite($limite,$total,$nombre);
    // si la limite pass&eacute;e n'est pas valide on la remet &agrave; z&eacute;ro
    if(!$verifLimite)  {
        $limite = 0;
    }
    $selection_recherche = mysql_query("SELECT *
    FROM annonces
    WHERE $valeur_requete $selecat $selecloc AND statut='oui' ORDER BY idannonce DESC LIMIT $limite,$nombre"); //requête avec le résultat de la boucle dedans
     
    $nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
     
     
    if ($nombre_resultats == 0) //s'il n'y a pas de résultat
    {
    echo '<div id=infoann align="left"><span class="contenus16blanc">Aucune annonce correspondant à votre recherche.</span></div>';
    }
    else //il y a au moins un résultat
    {
    echo '<div id=infoann align="left"> <span class="contenus16bleuciel">  '  . $total . '</span><span class="contenus16blanc"> annonce(s) correspondant à votre recherche <br /><br /></span></div>'; //nombre de résultats
     
     
    if($total) {
    while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
    {

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Base de données > UTF-8
    Tables > UTF-8
    Scripts PHP > UTF-8
    Flux HTML > encore et toujours UTF-8

    Et adieu les problèmes

  3. #3
    Membre du Club
    Inscrit en
    Février 2010
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 103
    Points : 44
    Points
    44
    Par défaut
    Merci Benjamin mais ma table et mes pages sont bien toutes encodées en Utf8.
    Mon problème ne se résout pas...

    Que puis-je faire avec les regexp? ... et que pour le résultat de ma requête soit prise en compte les termes avec ou sans accents ?

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    A moins de faire des regexp complexes au niveau MySQL ou de faire des recherches fulltext, je ne vois qu'un remplacement bien dégeu des caractères qui posent problème par des wildcards...

    Peut être que quelqu'un de plus expérimenté pourra trouver une solution plus propre.

    Oriente-toi quand même vers la recherche fulltext, je pense que c'est la solution. http://dev.mysql.com/doc/refman/5.0/...xt-search.html

Discussions similaires

  1. [JpGraph] Gestion des accents dans les titres et légendes (pb)
    Par Grégory_60 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 02/03/2015, 19h19
  2. Gestion des accents dans les HREF
    Par thais781 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 18/12/2013, 09h36
  3. [SP-2010]Gestion des accents dans le déploiement des vues de listes
    Par luelo2b dans le forum Développement Sharepoint
    Réponses: 4
    Dernier message: 10/09/2012, 17h26
  4. [Regex] gestion des accents dans un mot
    Par joseph_p dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 10/05/2006, 09h04
  5. [Conception] Gestion des accents dans une base de données
    Par MiJack dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 07/07/2005, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo