8797 sujets

Développement web côté serveur, CMS

Bonjour à tous !

J'essaie de faire une page d'accueil en récupérant 10 entrées dans ma table mysql au hasard. Pour que l'affichage du lien fonctionne il me faut : la première lettre du mot, l'intitulé normal, et l'intitulé "nettoyé".
Je procède ainsi :


$requete = mysql_query("SELECT * FROM entrees ORDER BY RAND() DESC limit 0, 10");

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

while ($donnees = mysql_fetch_array($requete))
						{
   $entree = $donnees['entree_nom'];			
   $ancre = nettoyage($donnees['entree_nom']);
   $premierelettre =  substr($entree, 0,1);
   $premierelettre = utf8_encode(TexteSansAccent($premierelettre));
   echo '<li><a href="index.php?lettre='.$premierelettre.'&amp;entree='.$ancre.'#'.$ancre.'" title="Consulter cette entrée">'.$entree.'</a></li>';
}


Quelqu'un saurait-il pourquoi les intitulés qui commence par un caractère spéciaux (É par exemple) me renvoie "lettre=na" ? au lieu de "lettre=E" par exemple ?

Merci d'avance !
Modifié par montoumes (16 Sep 2008 - 13:40)
Bonjour

J'ai peut-être mal lu ton code mais dans ton lien le texte affiché correspond à la variable $entree.

$entree correspont au donnée directement issu de la BDD. Donc si tu n'appliques pas les fonctions de "nettoyage", ce sont les caractères tels qu'ils sont dans la BDD qui sont affichés.

Il faudrait peut-être convertir en utf8 avant d'appliquer la fonction TexteSansAccent()...
Salut,

je ne comprends pas bien une chose : tes données sont bien en UTF-8 dans la base, non ?

Si oui je ferais comme ça :
<?php
error_reporting(E_ALL);
require_once('connexion.php');
mysql_query('SET NAMES UTF8');
$requete = mysql_query("SELECT * FROM entrees ORDER BY RAND() DESC limit 0, 10");
function TexteSansAccent($texte) {
	$texte = utf8_decode($texte);
	$accent  ='ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ';	   
	$noaccent='AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
	 $texte = strtr($texte, utf8_decode($accent), $noaccent); 
	return utf8_encode($texte);
}
while ($donnees = mysql_fetch_array($requete)) {
	$entree = $donnees['entree_nom'];			
	mb_internal_encoding("UTF-8");
	$premierelettre =  mb_substr($entree, 0, 1);
	$premierelettre = TexteSansAccent($premierelettre);
	echo $premierelettre ;
}
?>

A+
Salut,

Oui ma base est bien en UTF8 avec des données UTF8, et Heyoan, c'est déjà toi qui m'avait résolu problème du SET NAMES UTF8 qui manquait.

J'ai modifié la fonction TexteSansAccent uniquement et ça fonctionne. Donc je voulais savoir si les modifications dans le "while" sont également nécessaires ? Si ça sert à "faire les choses plus proprement", ou si on peut s'en passer ?
Re',

juste en passant la ligne mb_internal_encoding("UTF-8"); devrait être placée avant la boucle while et pas dedans. Smiley murf