Problèmes de Codage de caractères

Eléphant du PHP | 71 Messages

23 mai 2011, 11:57

Bonjour,

J'ai fais une interface de recherche des livres venant de ma table "livres" d'une base de données "Biblio", Ma table contient des livres Français et arabes.
à ne pas oublier que j'ai remplacé tous les caractères (é,è,ç ..... ) par leur code (é .......) car j'avais un problème de codage..
Mon problème consiste à :
1. quand je fais ma recherche, si je saisis une chaine qui contient des caractères spéciaux par exemple un "é" , je n'aurai aucun résultat malgré que ca existe :(
et aussi
2. quand je fais ma recherche en arabe le résultat sera : "aucun résultat" malgré qu'il existe :? :?

Avez vous une idée ??

Eléphant du PHP | 275 Messages

23 mai 2011, 12:09

"malgré que ça existe" ???

Quel est l'encodage de ton site ? Quel est l'encodage de la connection à mysql ? quel est l'encodage et la collation du champs de recherche ?

Tu utilises bien un LIKE pour faire la recherche ?

Eléphant du PHP | 71 Messages

23 mai 2011, 12:29

Le Codage utilisé dans tous les pages est : Utf-8 et En Mysql : utf8_bin.

voici une partie de mon code de recherche :
include "connexion.php";

$titre=  $_POST['titre'];
  $auteur=  $_POST['auteur'];
  $motscles= $_POST['motscles'];
  $cat= $_POST['categorie'];

if ($cat == 'livre') 
        {

$sql = 'SELECT * FROM livres ';  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  

if ($titre != "")
		{
		    // On selectionne les enregistrements contenant le mot clé dans les Titre ou l'auteur
	              $query = "SELECT distinct count(Titre) FROM livres
	               WHERE (Titre LIKE \"%$titre%\" ) ";
		
         	 $result = mysql_query($query) or die("Erreur : ".mysql_error()); 
             $row = mysql_fetch_row($result);
	         $Nombre = $row[0];

             // Si aucun enregistrement n'est retourné, on affiche un message adéquat
             if ($Nombre == "0") 
	          {
?>
	 	           <script language="javascript"> 
                     alert('Aucun résultat ne correspond à votre recherche');
                   </script>  
<?php 
               }
   // Sinon, on affiche le nombre d'enregistrements correspondant et les résultats eux-mêmes
            else 
              {
	             $query = "SELECT distinct Cote,Auteur,Titre,id FROM livres
	              WHERE (Titre LIKE \"%$titre%\" )    
	              ORDER by titre ASC";
		         $result = mysql_query($query);
	 // Si un seul enregistrement est trouvé, on affiche un message au singulier
	            if ($Nombre == "1") 
	              {
?>		            <div class="header_01">
      	            <P><?php  echo "<a name=\"#resultat\"><h2><p> &nbsp; </p>&nbsp; <p>Un r&eacute;sultat trouv&eacute;</P></h2></a> <p>"; ?></P>
                    </div>
<?php 
	               }
		    // Dans le cas contraire le message est au pluriel...
               else 
	               {
?>
		            <div class="header_01">
		               <p>  <?php  echo "  <a name=\"#resultat\"><h2>R&eacute;sultat: $Nombre r&eacute;sultats trouv&eacute;s</h2></a>	<p>"; ?>  </p>
		            </div>
                      <p>
<?php 
	               }

           while($data = mysql_fetch_array($result))
	            {

               $id =  $data['id'];
		
		           echo "	<p>\n
		            <p align = justify> <ul> <li> <b> <a href='Detail.php?id=$id'> $data[Titre] </a></b></li></ul></p> 
					 <p>&nbsp;</p>   \n
		            <p>\n
                    ";
					
	             }//while
        }
}


Eléphant du PHP | 71 Messages

23 mai 2011, 12:36

Et pour vous aider de plus :
J'ai essayer de faire ma recherche en remplaçant les caractères spéciaux par son cade ca marche bien c à d :
par exemple :
Je cherche un titre de livre qui contient le mot Génétique :
1. Si je met "Génétique" le résultat est : "aucun resultat trouvé"
2. Si je met "G&eacute;n&eacute;tique", ca marche et il m'affiche mon résultat.

Car dans ma base le "é" est écris par son code" &eacute;", Je pense que c ca mon problème mais j'ai pas de solution ???? :?
Que ce que je dois faire ??? :(

Dux
Eléphant du PHP | 127 Messages

23 mai 2011, 12:50

Salut,

utilises htmlentities() lors de la récupération des test $_POST
exemple $titre= htmlentities($_POST['titre']);

Eléphant du PHP | 71 Messages

23 mai 2011, 13:03

Je ai essayé d'utiliser " htmlentities" mais ca n'a pas encore marché :? :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 mai 2011, 13:13

Salut,

il faut voir ce que tu a dans la table, dans le formulaire et ce que tu reçois.

me htmlentities ne devrais être utiliser que pour l'affichage (déja rien que pour gagner de la place dans la table et ensuite a l’édition ça peux être le brin, sans parler des recherches).

test ta requete sur la console mysql ou avec phpmyadmin.

au niveau charset il y a celui de la connexion, celui des tables, celui du fichier et celui que tu indique au navigateur sont il tous les mêmes ?


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 71 Messages

23 mai 2011, 13:34

Comment je peux vous faire voir ce que j'ai dans la ma table ??

et Comment je peux tester ma requête sur la console mysql ou avec phpmyadmin ??

et pour le codage il est le même par tous.

Eléphanteau du PHP | 15 Messages

23 mai 2011, 14:55

Bonjour,

Prière de ne pas rire!
J'ai un problème proche de celui exposé ici.
Soit une table contenant des champs avec des valeurs accentuées.
Si j'affiche les valeurs dans un tableau crée par requête sql les valeurs sont affichées correctement.
Si j'affiche la même valeur hors de ce tableau le code des caractères n'est pas bon.

J'ai regardé le lien qui appelle la page les données 'fautées' sont bien transmises correctement avec les accents.

Merci de nous dire comment retrouver les différents charset utilisés?
la base est en utf-8
si je change le charset dans le head de la page c'est l'inverse qui se produit. Je n'avais encore jamais remarqué cette bizarrerie.

Amitiés

Petit nouveau ! | 4 Messages

21 juil. 2013, 19:14

Assalamu 3alaykum Sabrina,

Afficher correctement des données arabes extraites d'une table MySql :
PREMIERE PARTIE :

Police de caractère à choisir pour afficher les caractères arabes dans une table :

1. Créer une Table.

2. Dans le champ Interclassement, sélectionner "utf8_bin" comme langue d'affichage.

3. Enregistrer en cliquant sur Sauvegarder.


DEUXIEME PARTIE :

1. Ouvrir la page de résultats et repérer la ligne suivante :
mysql_select_db($database_MaBaseIci, $MaTableIci);

2. Copier les deux lignes suivantes immédiatement en dessous :
mysql_query("SET NAMES cp1256");
mysql_query("set characer set cp1256");

3. Modifier la ligne de charset pour "windows-1256" comme cela :
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256" />

4. Enregistrer.



Ma3a assalama,

Mister Arabic.
Modifié en dernier par moogli le 22 juil. 2013, 22:10, modifié 1 fois.
Raison : delete pub