Page 1 sur 2

Affichage de � dans le texte

Posté : 26 avr. 2010, 09:41
par Invité
Tout d'abord bonjour à tous, c'est la première fois que je poste sur ce forum! :D

Je vous explique mon problème.

Je développe un intranet, et j'ai codé un module qui permet :
- en mettant des fichiers pdf dans un dossier (sur le serveur), de les mettre automatiquement sur l'intranet, en ligne
- le but est que ces pdf apparaissent sous une forme particulière : liste des noms des pdf, cliquables

Vous me suivez? En gros :

On met un "blablabla.pdf" dans le dossier magique du serveur, et sur le site apparait "blablabla", on clique dessus et là pouf une petite fenêtre permettant d'ouvrir/enregistrer le pdf apparait.

Tout ça, je l'ai déjà fait. :)

Mon problème, c'est que si le titre d'un pdf contient é è à ' " etc il m'affiche des vieux symboles tous moches à la place : �
(j'avais même des problèmes avec les espaces, mais ça je l'ai résolu en mettant des underscores à la place)

Dans mon code j'ai mis ça :

Code : Tout sélectionner

$file = basename($file, ".pdf"); $file2 = str_replace ( '_', ' ', $file); $file3 = str_replace ( 'é', 'é', $file2); $file4 = str_replace ( "'", ''', $file3);
Mais non, que dalle, les deux dernières lignes ne marchent pas. :(

Du coup je me retrouve avec des liens comme ça sur l'intranet :
10.034 Bilan de l�utilisation de la ligne de tr�sorerie en 2009
:(
Affichage impeccable sur internet explorer en laissant les accents etc, mais toujours aussi dégueu sous firefox... problème d'encodage peut être?

Je sèche un peu là, z'avez pas une idée s'iouplait?


Taopaipai
________________________________________________________________
si vous avez besoin de plus de précisions, pas d'souci il suffit de l'demander

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 09:59
par stealth35
Hello, problème d'encodage, va faire un petit tour par ici
faq-tutoriels/encodage-utf-t245062.html
:wink:

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 11:19
par Invité
Merci du conseil, j'ai fait un tour!

J'ai inclus des balises meta utf8 dans mon code, j'ai même essayé d'autres trucs, mais ça ne marche toujours pas.

Pire : sous IE, l'affichage était bon mais les accents sont désormais remplacés par des carrés blancs.

Une petite remarque, avec IE ou Firefox, l'encodage de base est UTF-8. Si je le passe en Windows 1252 ou ISO 8859-1, les accents s'affichent bien.... toujours un problème d'encodage donc.

Je fais signe si je trouve la solution.

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 11:26
par Yosh
Il faut que tu convertisse TOUS tes fichiers ainsi que ta base de donnée dans le même format, et de préférence en UTF8.

Comme ça plus de problème.

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 12:00
par Invité
J'utilise Joomla pour créer mon site, ça veut dire qu'il faut que je rêgle le problème pour TOUS les fichiers? oO
Je les ouvre avec dreamweaver, et je change l'encodage, et c'est tout bon? Y'en a pour un moment mais si il n'y a que ça je vais essayer.

Concernant la bdd, tout était en latin jesaispasquopi, j'ai tout mis en utf8_general_ci (et ça n'a rien changé, toujours le bug).

Merci pour votre aide en tout cas

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 13:23
par AB
Tes données / requêtes / entêtes / enregistrements de fichiers ne sont pas cohérents du début à la fin concernant l'encodage.
Il est maintenant recommandé de coder en utf-8, cela te fait une bonne occasion de t'y mettre :wink:

Comme indiqué dans le tuto mentionné plus haut, TOUS tes outils doivent être configurés pour enregistrer les fichiers en utf-8, y compris des fichiers inclus etc.

Par ailleurs comme apache envoie pour l'instant par défaut des entêtes en iso, il faut mettre en haut de tes pages :
header('Content-Type: text/html; charset=UTF-8'); et pour les requêtes c'est idem il faut spécifier l'encodage juste après ta connexion à la bdd : mysql_query("SET NAMES 'utf8'");

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 16:32
par Taopaipai
Bon, j'ai (je crois) tout modifié en UTF-8 (sans BOM) et toujours les mêmes bugs. #-o
D'ailleurs Joomla avait quasiment tout mis en UTF-8 par défaut.

Les textes qui buggent sont issus des noms de mes pdf, lus par mon script php puis affichés, qui contiennent des accents.

J'ai lu ça :
C'est une très mauvaise idée de vouloir mettre des caractères accentués (ou exotiques) dans les noms de fichiers. Le fait de mettre des espaces pose déjà des problèmes, des caractères comme «/», «\» ou «:» sont prohibés sur certains systèmes de fichiers, alors vouloir mettre des accents, ce n'est que chercher des ennuis supplémentaires (notamment quand on veut transférer des fichiers sur un autre ordinateur ou sur une disquette). Bref, à éviter absolument.
Peut être que finalement le problème vient juste du fait que je ne peux pas vraiment mettre des accents dans mes titres??? :shock:

Re: Affichage de � dans le texte

Posté : 26 avr. 2010, 17:21
par AB
Ha ben oui si tes titres sont des noms de fichiers c'est une très mauvaise idée (qui ne fonctionnera pas et c'est indépendant de l'encodage). Pas d'accents ni de caractères spéciaux dans les nom de fichiers ou de dossiers !

Pour ces raisons on utilise les techniques de remplacement suivantes

Re: Affichage de � dans le texte

Posté : 27 avr. 2010, 11:11
par Taopaipai
Ok, je me disais aussi....

Merci pour ton aide!

Re: Affichage de � dans le texte

Posté : 27 avr. 2010, 18:33
par AB
Ok, je me disais aussi....

Merci pour ton aide!
Merci pour le petit mot, et puisque que tu es inscrit tu peux en profiter pour cocher une case à cocher verte pour mettre résolu :wink:

Re: Affichage de � dans le texte

Posté : 29 avr. 2010, 16:11
par Taopaipai
Finalement j'ai trouvé une solution à mon problème.

Le script 1 renvoie via l'url le nom des fichiers du dossier fouillé au script 2, qui lui contient des infos sur la lecture du pdf :

Code : Tout sélectionner

Script 2 : $cs=$_GET['date_cs']; $pdf=$_GET['nom_pdf']; //On veut afficher un pdf header('Content-type: application/pdf'); //Lui donner un nom header('Content-Disposition: attachment; filename='.$pdf); //Emplacement du fichier source readfile('C:\Program Files\wamp\www\ModuleSytralis\module_rapportsCS\rapports_cs\\'.$cs.'\\'.$pdf);
Du coup, dans le script 1, pour faire passer un nom de fichier qui contient des accents, je fais ceci :

Code : Tout sélectionner

Script 1 : while($file=(readdir($dir))) { if (($file != "." ) && ($file != ".." )) { //affichage sans l'extension $vrainom = $file; $file = basename($file, ".pdf"); //juste une petite image de pdf pour le style :p echo "<img src='/sytralis/images/menu/picto/picto_pdf.gif' border='0' width='16' height='16' /> "; $charset='UTF-8'; //$file2 est la version du nom de pdf qui sera affichée en tant que lien $file2 = htmlentities($file); $file2 = str_replace ( '_', ' ', $file2); //$vrainom est le nom du pdf passé au script 2 afin d'ouvrir le pdf $vrainom = rawurlencode ( $vrainom ) ; echo "<a href='//atlas/ModuleSytralis/module_rapportsCS/lire_pdf.php?date_cs=$nom&nom_pdf=$vrainom'> $file2 </a>"; echo "<br/><br/>"; } }
La fonction rawurlencode() fait tout pour moi, un vrai p'tit bonheur ^^
Je peux donc afficher un lien qui apparait comme le nom du fichier, avec ses accents (et virgules, apostrophes...), et qui permet d'ouvrir un pdf.

Tout est bon! dans le cochon

Re: Affichage de � dans le texte

Posté : 29 avr. 2010, 16:46
par AB
Je peux donc afficher un lien qui apparait comme le nom du fichier, avec ses accents (et virgules, apostrophes...), et qui permet d'ouvrir un pdf.
Tout est bon! dans le cochon
Tant que tu reste sur windows ça peut marcher mais fait un essai sur un serveur distant pour voir avant de crier victoire... :wink:

Re: Affichage de � dans le texte

Posté : 30 avr. 2010, 09:31
par Taopaipai
C'est pour l'intranet d'une entreprise, tout le monde est sous windows et dans le même LAN, ça ne devrait pas poser de problèmes :wink:

Re: Affichage de � dans le texte

Posté : 30 avr. 2010, 18:01
par AB
Ah ok, si vous êtes certain de ne pas avoir à porter le site sur Web :)

ça m'étonne juste que tu n'aies pas utilisé rawurldecode pour décoder le $_GET['nom_pdf'] dans le script 2, mais bon si ça fonctionne...

Re: Affichage de � dans le texte

Posté : 03 mai 2010, 09:31
par Taopaipai
Effectivement, je viens d'ajouter le rawurldecode() :?
Quant à la question "pourquoi ça marchait sans", je dirai qu'avec php on peut s'attendre à tout :roll: