Hébergements Web - Bdd MySQL / Problème de gestion des caractères accentués = �
BMPCreated with Sketch.BMPZIPCreated with Sketch.ZIPXLSCreated with Sketch.XLSTXTCreated with Sketch.TXTPPTCreated with Sketch.PPTPNGCreated with Sketch.PNGPDFCreated with Sketch.PDFJPGCreated with Sketch.JPGGIFCreated with Sketch.GIFDOCCreated with Sketch.DOC Error Created with Sketch.
Frage

Bdd MySQL / Problème de gestion des caractères accentués = �

Von
RomainG42
Erstellungsdatum 2023-02-23 19:14:09 (edited on 2024-09-04 14:19:32) in Hébergements Web

Bonjour,

J'utilise des requêtes PHP (sans doute complètement dépassés) pour extraire des infos d'une bdd depuis 15 ans, et cela fonctionnait très bien jusqu'à récemment. La requête fonctionne toujours mais malgré mes efforts pour essayer de corriger, tous les caractères accentués se transforment en � dans les résultats (et même sur les pages en PHP elles-mêmes).

L'URL de la page : https://www.perso-laplagne.fr/PhotosAnciennes.php

Le code PHP de la requête :




// les variables à changer pour la base de données :



// host : url de la base de données

$host="****";

// user : nom d'utilisateur

$user="****";

// passe : mot de passe utilisateur

$passe="****";


$connec=mysql_connect("$host","$user","$passe");



if (!$connec)

{

echo "Connexion à la base de données impossible !";

}

else

{

$select_base=mysql_selectdb("***",$connec);

if (!$select_base)

{

echo "Connexion à la base de données impossible !";

}

else

{


$requete_sql='SELECT Nom, Legende, LegendeENG, LegendeSecondaire, MotsCles, Objet, AnneeMin, AnneeMax from PhotographiesAnciennes WHERE (anneemin BETWEEN \''.$anneemin.'\' AND \''.$anneemax.'\' OR anneemax BETWEEN \''.$anneemin.'\' AND \''.$anneemax.'\') AND (Objet LIKE \''.$telesieges.'\' OR Objet LIKE \''.$stations.'\' OR Objet LIKE \''.$paysages.'\' OR Objet LIKE \''.$travaux.'\' OR Objet LIKE \''.$evenements.'\' OR Objet LIKE \''.$teleskis.'\' OR Objet LIKE \''.$telecabines.'\') AND (Legende LIKE \''.$motscles.'\') ORDER BY AnneeMin ';

$resultat=mysql_query($requete_sql);

$nb_image=mysql_num_rows($resultat);

// les résultats sont stockés dans un tableau :

// Nom:$texte[0] ; Legende:$texte[1] ; LegendeENG:$texte[2] ; LegendeSecondaire:$texte[8] ; MotsClés:$texte[3] ; Objet:$texte[4] ; AnneeMin:$texte[5] ; AnneeMax:$texte[6] ;

// boucle while pour afficher tous les résultats par tableaux

// on tronque le ".jpg" du nom de la photo et on le remplace par ".htm"

echo "

$nb_image image(s) trouvée(s)

";



if (mysql_num_rows($resultat) == 0){

echo "

Désolé, aucune image n'a été trouvée. Soit il n'y a pas de photos correspondantes dans la collection, soit vous devez reformuler votre recherche en vérifiant que vous avez bien choisi un type de photos ou en vérifiant l'orthographe de votre mot-clé. Si le problème persiste, merci de me contacter. "; }



while($texte=mysql_fetch_array($resultat))

{

echo("







image

$texte[3]




      $texte[1]






");

}

}

}

?>


J'ai bien essayé de définir UTF8 comme encodage par défaut sur mes pages et dans ma bdd MySQL, mais rien n'y fait, je suis paumé !

De plus, j'ai une fonction qui retire les accents des mots clé entrés par l'utilisateur, mais elle fausse tout. J'aimerais bien la retirer mais je ne sais pas écrire le code correctement (on m'a rédigé cette requête clé en main)


$paysages = htmlentities($_POST['paysages'], ENT_QUOTES);
$travaux = htmlentities($_POST['travaux'], ENT_QUOTES);
$stations = htmlentities($_POST['stations'], ENT_QUOTES);
$teleskis = htmlentities($_POST['teleskis'], ENT_QUOTES);
$telesieges = htmlentities($_POST['telesieges'], ENT_QUOTES);
$telecabines = htmlentities($_POST['telecabines'], ENT_QUOTES);
$evenements = htmlentities($_POST['evenements'], ENT_QUOTES);
$anneemin = htmlentities($_POST['anneemin'], ENT_QUOTES);
$anneemax = htmlentities($_POST['anneemax'], ENT_QUOTES);
$motscles = $_POST['motscles'];

// retire les accents des mots clés et ajouter les % pour la requete sql

$motscles = '%'.retireaccents($motscles).'%';

// fonction pour retirer les accents du mot clé rentré par l'utilisateur

function retireaccents($string)

{

$string= strtr($string, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ", "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");

return $string;

} ;

?>

Merci d'avance si quelqu'un peut m'apporter son aide !


5 Antworten ( Latest reply on 2023-02-24 12:37:35 Von
Gaston_Phone
)

Bonjour @RomainG42

Voir --> **https://wordetweb.com/word-et-web/OVH-php-5.6-mauvais-affichage-caracteres-accentues-resolu-FR.htm OVH - PHP 5.6 - Mauvais affichage des caractères accentués**

Merci beaucoup ! C'était donc aussi bête que ça...
Le principal problème est réglé !

Reste que mes requêtes ne supportent pas le passage à une version supérieure de PHP et je suis bien incapable de les mettre à jour.
J'ai aussi un problème qui perdure pour la gestion des accents dans le moteur de recherche.


Reste que mes requêtes ne supportent pas le passage à une version supérieure de PHP et je suis bien incapable de les mettre à jour.

Normal @RomainG42 tu as du créer ton script PHP avec des requêtes SQL de type mysql qui ne ne sont plus acceptées dans les versions de Windows.

Deux solutions :
- Passer à mysqli --> **https://wordetweb.com/word-et-web/OVH-Tester-une-base-de-donnees-avec-un-script-mysqli-FR.htm OVH - Test de Base de Données via un script mysqli**
- Passer au mode PDO --> **https://wordetweb.com/word-et-web/OVH-Tester-une-base-de-donnees-via-un-script-PDO-FR.htm OVH - Test de Base de Données via un script en langage PDO**


qui ne ne sont plus acceptées dans les versions de Windows.


Gaston a certainement voulu dire " les versions de PHP".

En effet.
Bien vu @fritz2cat