Page 1 sur 1

[Résolu] utf-8: un coup oui, un coup non...

Posté : 07 févr. 2012, 15:22
par Boro64
Bonjour
Je soumet à votre sagacité (et expérience) le soucis suivant:
Je dois afficher un texte issue de base MySql. Le texte en base est encodé en utf-8_unicode_ci et ne présente aucun défaut dans PhpMyAdmin.
Lorsque dans une page, j'affiche l'intégralité du texte, pas de soucis d’affichage.
Mais lorsque, pour le même texte, dans une autre page, j'extraie une partie de celui-ci (les 10ers mots) pour en faire un lien "Lire la suite...", là, tous les accents deviennent ces horribles petites choses: �
Bon, non seulement c'est laid, mais en plus ça rend le texte illisible.

Donc, ceci fonctionne:
echo '<p>'.nl2br($descriptif).' </p>';
Ceci non:
    $machaine =$all['descriptif'];
    //on la coupe au niveau des espace , on recupére dans un tableau
    $tmots = explode(' ',$machaine);
    //ou coupe notre tableau afin de n'avoir que 10 valeurs
    $tnewChaine = array_slice($tmots, 0, 10);
    //on recolle la chaine
    $newChaine = implode( ' ',$tnewChaine);
	echo '<p> '.$nom_album .'<br />'.$newChaine.' ...<a href="folio.php?album='.$id.'">Lire la suite...</a></p>';
Côté header html, les 2 pages sont identiques:
    <meta charset="utf-8">         
    <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />    
Et toutes les 2 écrites avec Notepad++ en utf-8 sans BOM......
Testé avec différents navigateurs, même résultat !
J'ai tenté un htmlentities, qui résolvait bien mon soucis d'affichage pour les accents, mais qui, du coup (et c'est normal) m'affichait mes balises
<br />
.....

Là, j'avoue que je sèche un peu.
Auriez vous une piste, une idée, un conseil?

D'avance merci

Re: utf-8: un coup oui, un coup non...

Posté : 07 févr. 2012, 17:03
par moogli
salut,

il me semble qu'explode ne gère pas les chaine utf-8 oriente toi plutot vers l'extension mbstring avec par exemple mb_split

edit : d'ailleus un commentaire de la doc d'explode semble aller dans ce sens (et indique l'extension iconv).


@+

Re: utf-8: un coup oui, un coup non...

Posté : 07 févr. 2012, 17:23
par xTG
Oui je confirme, explode() fonctionne au coeur du moteur PHP et utilise donc de l'iso.

Re: utf-8: un coup oui, un coup non...

Posté : 07 févr. 2012, 17:26
par Boro64
Une fois de plus, merci à toi moogli =D>
Effectivement, en faisant
echo mb_internal_encoding();
, s'affichait ISO-8859-1 .......
Et effectivement ta solution iconv() relevé dans la doc supprime le soucis.
Ce qui au final donne:
							    //la chaine de plus de 10 mots
    $machaine =$all['descriptif'];
    //on la coupe au niveau des espace , on recupére dans un tableau
    $tmots = mb_split(' ',$machaine);
    //ou coupe notre tableau afin de n'avoir que 10 valeurs
    $tnewChaine = array_slice($tmots, 0, 10);
    //on recolle la chaine
    $newChaine = implode( ' ',$tnewChaine);

	echo '<p> '.$nom_album .'<br />'.iconv("ISO-8859-1", "UTF-8",$newChaine).' ...<a href="folio.php?album='.$id.'">Lire la suite...</a></p>';

NB: Pendant que tu prenais soin de me répondre, j'étais plongé dans l'excellent tuto d' AB que je me permet de conseiller à tous .

NB2: Merci à toi aussi xTG dont la réponse arrive pendant la rédaction de ma réponse. =D>