Contenu | Rechercher | Menus

Annonce

Ubuntu-fr vend de superbes t-shirts et de belles clés USB 32Go
Rendez-vous sur la boutique En Vente Libre

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 04/02/2020, à 18:50

noetic

Encodage utf8

Bonjour ! smile

Je rencontre une difficulté sans doute banale qui m'est difficile :

Lors d'une saisie sur un formulaire de recherche (moteur) les accents ne sont pas reconnus. Dans la base de données ces accents ne posent aucun problème bien enregistrés en format utf8.

Exemple : si je saisis le mot être, le moteur ne trouve aucun résultat, en revanche si je saisi  etre  sans accent, tous les mots "etre" avec accent s'affichent... Merci pour votre aide.

Cordialement.

Ps : je suis sous : Bionic 18.04 , donc php 7.2 et mysql Ver 14.14 Distrib 5.7.29, (i686)

Dernière modification par Ayral (Le 04/02/2020, à 20:54)

Hors ligne

#2 Le 04/02/2020, à 23:25

krodelabestiole

Re : Encodage utf8

on ne peut pas t'aider sans avoir le code sous les yeux. c'est toi qui le développe ce moteur ? tu utilises un framework ?

essaie d'isoler le problème : entre directement une requête dans la console mysql pour voir si ça pose un problème.
et sinon essaie de trouver à quel endroit ta requête est mal formulée : utilise dans l'idéal un debugger comme xdebug, sinon des logs ou un var_dump.
si tu utilises un framework tu as peut-être à disposition une barre de développement qui donne plein d'info : dernières requêtes, paramètres passés à la page, etc.

Hors ligne

#3 Le 04/02/2020, à 23:53

noetic

Re : Encodage utf8

Bonjour/Bonsoir !
Merci pour votre intervention; non je n'utilise pas de framework, je suis en locale pour l'instant.
Ci-contre le formulaire :

<?php include("../../BDD/connexion.php");

     echo '<center>';   
     echo '
           <form action="../../../recherche.php" method="Post">
           <input type="text" name="requete" size="40px">
           <input type="submit" value="Ok">
           </form>';
     echo '</center>';      
    ?>

Et ci-dessous celui de la recherche :

<?php
     
    // Connexion à la base donnée
    $db_server = 'localhost'; // Adresse du serveur MySQL
    $db_name = 'site';            // Nom de la base de données
    $db_user_login = 'root';  // Nom de l'utilisateur
    $db_user_pass = '#';       // Mot de passe de l'utilisateur
    
     
    // Ouvre une connexion au serveur MySQL
    $conn = mysqli_connect($db_server,$db_user_login, $db_user_pass, $db_name); 
    

    if ( isset($_POST['requete']) )
    $requete = htmlentities($conn->real_escape_string($_POST['requete']));

 
    if (!empty($requete)) 
    {
        $req = "SELECT * FROM recherche WHERE keywords LIKE '%$requete%' OR titre LIKE '%$requete%' "; 
      
          
        $exec = $conn->query($req);                            
// exécuter la requête
        $nb_resultats = $exec->num_rows;              // compter les résultats

?>

Cordialement.

Hors ligne

#4 Le 04/02/2020, à 23:59

krodelabestiole

Re : Encodage utf8

oui enfin non, je te demande pas de me filer l'intégralité de ton code. ça prendrait des pages et un forum n'est pas du tout fait pour ça. et le debug d'application web, perso, je le facture.
ici on peut répondre à des questions simples, pas à pourquoi mon programme ne fonctionne pas. donc je t'indique différentes méthodes pour essayer d'y voir plus clair (requête mysl directe et fonction var_dump faute de mieux)
pour que tu puisses débugger toi-même ton script.

fais entre autre attention à l'encodage des caractères normalement dans le head de ta page html, à celui de ta base de données, ainsi qu' à celui qu'on oublie souvent : celui de la connexion à la base de données (qui n'est pas forcément le même). là il faut de l'utf8 partout apparemment.

Hors ligne

#5 Le 05/02/2020, à 00:12

noetic

Re : Encodage utf8

Merci krodelabestiole.
Je vais m'y atteler dès que possible (il est tard pour moi !) à tes recommandations et je reviendrais pour la suite...
Merci encore, cordialement.

Hors ligne

#6 Le 05/02/2020, à 22:47

noetic

Re : Encodage utf8

Bonsoir !
Après avoir excuter un var dump, j'obtiens ceci :

Warning
: var_dump() expects at least 1 parameter, 0 given in
/var/www/html/recherche.php
on line
194

Or la ligne 194 c'est justement celle du var dump ! Je suppose que c'est une ligne plus haut...

<?php

    if($nb_resultats != 0) 
    {
       echo '<center>';   
       echo '
           <form action="" method="Post">
           <input type="text" name="requete" size="40px">
           <input type="submit" value="Ok">
           </form>';
      echo '</center>';
      echo '<font size="5px" color="blue">Résultat de votre recherche </font><br/>
            <font size="5px" color="teal">'.$nb_resultats.'</font>';


    if($nb_resultats > 1)
    {
        echo ' <font size="4px" color="red">résultats</font> ';
    }
        else
        {
            echo ' <font size="4px" color="red">résultats trouvés </font>  ';
        } 

       echo  '<font size="4px" color="red">dans notre base de données :</font><br/><br/>';



    while($donnees = mysqli_fetch_array($exec))
    {
    ?>

    <?php
          
          echo '<span>'; 
          echo '<font size="5px" color= "blue">'.$donnees['adresse_site'].'</font><br/>';
          
          echo '<font size="3px">'.$donnees['description_titre'].'</font><br/><br/>';
          echo '</span>';
    ?>

    <?php
    } // fin de la boucle
    ?>


    <?php
    }


    else {
        echo '<center>';   
        echo '
           <form action="" method="Post">
           <input type="text" name="requete" size="60px">
           <input type="submit" value="Ok">
           </form>';
        echo '</center>';
        echo '<h3>Pas de résultats</h3>';
        echo '<pre>Nous n\'avons trouver aucun résultats pour votre requête sur :
              <font color="blue">' .$_POST['requete'].'</font></pre>';
      
     }
    }

    else
    { 


     echo '<center>';   
     echo '
           <form action="" method="Post">
           <input type="text" name="requete" size="60px">
           <input type="submit" value="Ok">
           </form>';
     echo '</center>';      

    }
    var_dump()
?>

Si une âme charitable pouvait m’éclairai...Merci.
Cordialement.

Hors ligne

#7 Le 05/02/2020, à 22:51

krodelabestiole

Re : Encodage utf8

var_dump sert à débuguer des variables, il faut les passer en paramètres (entre parenthèses)

dans ton script de recherche tu peux par ex. faire :

$req = "SELECT * FROM recherche WHERE keywords LIKE '%$requete%' OR titre LIKE '%$requete%' "; 
var_dump($req);

et tu verras si ton accent est bien formé dans ta requête.

Hors ligne

#8 Le 05/02/2020, à 23:23

noetic

Re : Encodage utf8

Bonsoir krodelabestiole !
Après ta suggestion, en saisissant le mot âme avec accent, j'obtiens en retour ceci : string(86) "SELECT * FROM recherche WHERE keywords LIKE '%âme%' OR titre LIKE '%âme%' "
Ai-je omis d'activer quelque chose pour la chaîne de caractères, ou est-ce autre chose ?
Merci.

Hors ligne

#9 Le 05/02/2020, à 23:27

krodelabestiole

Re : Encodage utf8

ça a l'air plutôt bien, et si tu entres directement cette requête en console mysql ça donne le résultat attendu ?

sudo mysql

puis

use database;

en remplaçant database par le nom de ta base de données puis :

SELECT * FROM recherche WHERE keywords LIKE '%âme%' OR titre LIKE '%âme%' 

Hors ligne

#10 Le 05/02/2020, à 23:45

noetic

Re : Encodage utf8

mysql  n'accepte pas l'accent  en saisi !

Hors ligne

#11 Le 06/02/2020, à 00:21

noetic

Re : Encodage utf8

Merci krodelabestiole !
Vue l'heure tardive, je reprendrais demain...
Cordialement.

Hors ligne

#12 Le 06/02/2020, à 20:59

noetic

Re : Encodage utf8

Bonsoir !
Est ce que quelqu'un aurais une idée d'où viendrait le problème à savoir que : lors d'une requête sur la console, Mysql ne prend pas en charge les accents !
Qui est configurer de la sorte :

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Dernière modification par noetic (Le 06/02/2020, à 21:03)

Hors ligne

#13 Le 10/02/2020, à 01:27

noetic

Re : Encodage utf8

Bonjour, bonsoir !
Le problème est résolu, merci à krodelabestiole d'avoir essayer de m’aidai.
Cela provenait par une erreur de codage de ma part de la fonction : htmlentities au lieu et place de htmlspecialchars.
Cordialement.

Hors ligne