le 17/10/2007 à 22:31
surfeurdu33
Bonsoir à tous,
Je suis en train d'essayer de mettre en place un petit moteur de recherche pour mon blog.
J'ai utilisé l'un des tutos dispo ici et le moteur de recherche fonctionne très bien.
Mais il fonctionne quand la requète ne contient pas d'accents.
Exemple : si je recherche "maison" il va me trouver les articles correspondants sans problème.
Par contre si je recherche le mot "période" il me trouvera bien les articles contenant "période" mais j'aimerai aussi qu'il me trouve les articles avec le mot "periode".
Et inversement bien sur.
Voiçi le code :
Les données dans ma base de données sont stockés avec des caractères du genre é à.
Les interclassements des tables sont en "latin1_swedish_ci" et mes pages en ISO-8859-1.
Est-ce que quelqu'un pourrait me donner quelques astuces ou pistes ?
Faut-il stocker les mots directement avec des accents dans la base de données ?
Ou faut-il faire comme je le fais faire un htmlentities avant de les insérer dans la base de données.
Le problème après avec le htmlentities, c'est que si je dois faire des recherches avec LIKE , si j'ai des données de type : é dedans il ne me trouvera jamais de résultats le moteur de recherche.
J'espère être clair, et merci d'avance si vous pouvez m'aider.
Je suis en train d'essayer de mettre en place un petit moteur de recherche pour mon blog.
J'ai utilisé l'un des tutos dispo ici et le moteur de recherche fonctionne très bien.
Mais il fonctionne quand la requète ne contient pas d'accents.
Exemple : si je recherche "maison" il va me trouver les articles correspondants sans problème.
Par contre si je recherche le mot "période" il me trouvera bien les articles contenant "période" mais j'aimerai aussi qu'il me trouve les articles avec le mot "periode".
Et inversement bien sur.
Voiçi le code :
<?php
if(isset($_POST['requete']) && $_POST['requete'] != NULL)
{
include('include/cnx_mysql.php');
$requete = htmlentities($_POST['requete'], ENT_QUOTES);
$query = mysql_query("SELECT * FROM blog WHERE body LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error());
$nb_resultats = mysql_num_rows($query);
if($nb_resultats != 0)
{
?>
<h3>Résultats de votre recherche.</h3>
<p>Nous avons trouvé <?php echo $nb_resultats;
if($nb_resultats > 1) { echo ' résultats '; } else { echo ' résultat '; }
?>
dans notre base de données. Voici les fonctions que nous avons trouvé :<br/>
<br/>
<?php
while($donnees = mysql_fetch_array($query))
{
?>
<a href="fonction.php?id=<?php echo $donnees['id']; ?>"><?php echo $donnees['head']; ?></a><br/>
<?php
}
?><br/>
<br/>
<a href="test.html">Faire une nouvelle recherche</a></p>
<?php
}
else
{
?>
<h3>Pas de résultats</h3>
<p>Nous n'avons trouvé aucun résultats pour votre requête "<?php echo $_POST['requete']; ?>". <a href="test.html">Réessayez</a> avec autre chose.</p>
<?php
}
mysql_close();
}
else
{
?>
<p>Rechercher dans le blog</p>
<form action="<?phpphp $_SERVER['PHP_SELF'] ?>" method="Post">
<input type="text" name="requete" size="10">
<input type="submit" value="Ok">
</form>
<?php
}
?>
Les données dans ma base de données sont stockés avec des caractères du genre é à.
Les interclassements des tables sont en "latin1_swedish_ci" et mes pages en ISO-8859-1.
Est-ce que quelqu'un pourrait me donner quelques astuces ou pistes ?
Faut-il stocker les mots directement avec des accents dans la base de données ?
Ou faut-il faire comme je le fais faire un htmlentities avant de les insérer dans la base de données.
Le problème après avec le htmlentities, c'est que si je dois faire des recherches avec LIKE , si j'ai des données de type : é dedans il ne me trouvera jamais de résultats le moteur de recherche.
J'espère être clair, et merci d'avance si vous pouvez m'aider.