Bonjour,

Je m'explique - J'ai fait le tuto sur le moteur de recherche il fonctionne. Mon contenu est inséré par une administration avec fckeditor (qui est aujourd'hui ckeditor) pour le contenu plus un champ titre un autre mots-clés et une insertion d'une image. Mes champs de ma table sont tous en utf8_general_ci. Quand je crée mon nouveau contenu tout est ok mes accents y sont et sur tout les ç. Mais lorsque je vais sur la page index du moteur de recherche où je vois mes posts tous les accents sont présent sauf pour le titre à la place du ç j'ai ceci ç.
Que ma recherche ce face de mon fichier index.php ou search.php c'est pareil. j'ai bien cette ligne en entête

<?php header ('Content-type: text/html; charset=UTF-8'); ?>

.

Merci pour votre aide.
Bruno

18 réponses


Tu as vérifié dans ton php.ini ?

Bruno
Auteur

Bonjour,

En fait je suis en local avec WampServer je viens de vois le php.ini mais rien ne me cause et si il y a quelque chose à mettre et je ne sais pas quoi mettre.

As tu dans le head de ta page :

<meta charset="utf-8">

Que se sois mysql, pdo ou autre, il existe des fonctions qui permettent de forcer l'utf8

mysql_query("SET NAMES 'utf8'");
// ou :
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
$dbh->exec("SET CHARACTER SET utf8");
Bruno
Auteur

Voici mon code j'ai rajouter le premier qui me donne mais rien y fait.

<?php
header ('Content-type: text/html; charset=UTF-8');
?>
<form method="get" action="search.php">
        Recherche : <input type="text" name="q" >
        <input type="submit" value="Chercher" >
</form>

<?php
require "connexion.php" ;
$sql="SELECT * FROM news" ; // Connexion à la base de données
$req=mysql_query ($sql) or die ( mysql_error () ) ;
mysql_query("SET NAMES 'utf8'");
while ($d=mysql_fetch_assoc ($req)) {
                echo "<h1>".$d"titre"]."</h1>" ;
                echo "<p>".$d"contenu"]."</p>" ;
    }
?>

Merci pour l'aide

Bruno
Auteur

Merci James Hemery,

Je viens tout juste de rentrer chez moi.
En fait ce qui traite le formulaire fonctionne bien c'est une admin que j'avais fais voilà quelques temps. Ca fonctionne très bien car dans l'admin je peux voir mon post et tout est bien reconnu. Le problème vient surement des fichiers index.php et search.php. Je met le fichier connexion ci-dessous mais je doute que ça vient de là.

<?php
// Affichage des erreurs de connexion
 function erreur( $message )
 {
  echo $message ;
  exit ;
 }
 $host = 'localhost';
        $login='root';
        $password='';
        $db = 'ma_base';
     // connexion au serveur de données
 @mysql_connect( $host , $login , $password )
  or erreur( 'Connexion au serveur de données impossible' ) ;

 @mysql_query (' SET NAMES UTF8' ) ;

 // Sélection de la base de données
 @mysql_select_db( $db )
  or erreur( 'Sélection de la base de donnée impossible' ) ;

 // fonction pour faire des requêtes
 function requete( $requete )
 {
  if($resultat = mysql_query( $requete )) return $resultat ;
  erreur( "Erreur dans la requête : $requete<br>" . mysql_error() ) ;
 }
?>

Dans un petit moment je vais tester ce que tu as laissé ci-dessus.

Merci encore

Bruno
Auteur

Bien je viens de tester

J'ai quatre erreur dans le fichier index.php.

Trying to get property of non-object in D:\wamp\www\bparser\index.php on line 17
Trying to get property of non-object in D:\wamp\www\bparser\index.php on line 18

Mais là je ne vois pas pourquoi

voici le code index.php

<?php
header ('Content-type: text/html; charset=UTF-8');
?>

<form method="get" action="search.php">
        Recherche : <input type="text" name="q" >
        <input type="submit" value="Chercher" >
</form>

<?php
require "connexion.php" ;

$sql="SELECT * FROM news" ; // Connexion à la base de données
$req= $db->query($sql);
while ($d=$req->Fetch()) {
                echo "<h1>".$d->titre."</h1>" ;
                echo "<p>".$d->contenu."</p>" ;
    }

?>

Merci pour les éclaircissements.

$d=$req->Fetch()

avec un "f" min, pas avec un "F" maj

Bruno
Auteur

Bonjour Pewel,

non ce n'est pas ça (pour le f minuscule) j'ai toujours les erreurs à la ligne 17 et 18.
Je voulais rappeler que titre à la ligne 17 et contenu à la 18 c'est la structure de ma table.

Merci pour votre intérêt.

Le problème avec ce genre d'erreur : "Trying to get property of non-object", ça veut dire que ta variable n'est pas un objet (la plupart du temps elle est nulle).

Du coup c'est ton $d qui est null. Et la dernière affectation que tu lui fait, c'est le fetch en question.

Le problème vient du fetch. As tu au moins testé avec le f de fetch en minuscule ?

Tu as la doc de fetch qui peut t'aider.

Bruno
Auteur

Oui pour le f minuscule j'ai testé et pas mieux

Mais j'ai fini par réussir à avoir l'affichage sur ma page index.php du contenu de la base mais pas sur la page search.php.
Mais ça n'a pas réglé mon problème de mon ç j'ai toujours le symbole ç à la place. Voici mon code de ma page index.php

<?php
header ('Content-type: text/html; charset=UTF-8');
?>

<form method="get" action="search.php">
        Recherche : <input type="text" name="q" >
        <input type="submit" value="Chercher" >
</form>

<?php
require "connexion.php" ;

   // On récupère tout le contenu de la table news
    $reponse = $bdd->query('SELECT * FROM news');

    while ($donnees = $reponse->fetch())
    {
        echo $donnees 'titre'];
        echo $donnees 'contenu'];
    }

 $reponse->closeCursor() ; // Termine le traitement de la requête

 ?>
Bruno
Auteur

A vrai dire je commence à m'embrouiller la tête. Je me considère comme débutant et là ça commence à être un peut trop dur pour moi.

Bruno
Auteur

non pas de spype mais si tu veux un email.

C'est sympas merci.

Cherche "default_charset" dans ton php ini, set le à "utf-8" pour avoir ça :

default_charset = "utf-8";

Oublie pas de redémarrer ton serveur (Apache si c'est apache etc), reload ta page (vide le cache carrément en faisant Ctrl + maj + r) et dis nous si ça fait toujours la même chose ;)

Bruno
Auteur

Je viens de le faire en plus j'ai testé de mette un ç dans mon contenu et ça fonctionne mais pas dans mon champ titre mais à l'affichage de mon index.php ou search.php. Dans mon admin ou je vois aussi le titre est bien affiché.

Je cale carrément.

Alors ça vient peut être de la façon dont est enregistré le fichier (ou les fichiers) qui affiche ce champ.
Pour tout les fichiers (contrôleurs, vues, modèles) qui interagissent avec ta variable, tu vas dans ton éditeur et tu choisi l'encodage utf-8 avant d'enregistrer.

Bruno
Auteur

Bonjour Pewel,

Je code avec Sublime Text 2 et il enregistre mes fichiers en UTF-8.
C'est pour cela que je cale dur, sur tout qu'il me le fait que sur l'affichage c'est à dire l'index et le fichier search.php.
Dans dit que dans ma partie admin j'ai une page d'insertion plus une autre page qui m'injecte le contenu dans ma page et des pages de modification. Dans ces dernières mon titre s'affiche normalement.

Merci pour toute l'aide

Bruno
Auteur

Bonjour,

Je viens de mettre dans mes fichiers index et search dans ma partie en html du texte avec un ç et ça marche j'en ai mis un aussi dans le contenu du post et ça fonctionne aussi. Je pense que ça vient de dans ma table mysql et plus précisément ma structure 'titre' et ma structure 'mot_clé' car ce sont deux champ qui ont été rajouté à FCKeditor.

J'ai pourtant regardé dans ma base de données ainsi que ma table et la structure soient en utf8_general_ci.

De plus cette admin je l'ai déjà utilisé pour un autre site et tout fonctionne bien, car j'ai testé de mettre un ç et ça fonctionne, mais pas dans celui que je suis entrain de faire.

Je voulais dire à l'affichage j'ai ceci et dans la base Mysql la même chose. Par contre j'ai modifié un contenu et un tire, j'ai mis dans le titre un ç et é à l'affichage j'ai çé et dans le contenu j'ai mis un ç et il s'affiche très bien. Donc j'en déduit que j'ai un problème avec ma base mysql car pour ce qui est de ma structure 'contenu' le résultat est ç é donc il s'affiche bien à l'affichage mais dans la structure 'titre' pour les mêmes lettres j'ai ceci çé.

Mais je ne vois pas pourquoi car 'titre' est en utf8_general_ci comme 'contenu'.

Je suis entrain de devenir chèvre. Help me!

Bonjour

essaie de rajouter cette ligne dans le fichier httpd.conf de ton serveur apache:

AddDefaultCharset UTF-8

ça devrais marcher.