Affichage de � dans le texte

Invité
Invité n'ayant pas de compte PHPfrance

26 avr. 2010, 09:41

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

ViPHP
ViPHP | 5462 Messages

26 avr. 2010, 09:59

Hello, problème d'encodage, va faire un petit tour par ici
faq-tutoriels/encodage-utf-t245062.html
:wink:

Invité
Invité n'ayant pas de compte PHPfrance

26 avr. 2010, 11:19

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.

Mammouth du PHP | 568 Messages

26 avr. 2010, 11:26

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.

Invité
Invité n'ayant pas de compte PHPfrance

26 avr. 2010, 12:00

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

ViPHP
AB
ViPHP | 5818 Messages

26 avr. 2010, 13:23

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'");

Petit nouveau ! | 5 Messages

26 avr. 2010, 16:32

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:

ViPHP
AB
ViPHP | 5818 Messages

26 avr. 2010, 17:21

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

Petit nouveau ! | 5 Messages

27 avr. 2010, 11:11

Ok, je me disais aussi....

Merci pour ton aide!

ViPHP
AB
ViPHP | 5818 Messages

27 avr. 2010, 18:33

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:

Petit nouveau ! | 5 Messages

29 avr. 2010, 16:11

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

ViPHP
AB
ViPHP | 5818 Messages

29 avr. 2010, 16:46

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:

Petit nouveau ! | 5 Messages

30 avr. 2010, 09:31

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:

ViPHP
AB
ViPHP | 5818 Messages

30 avr. 2010, 18:01

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...

Petit nouveau ! | 5 Messages

03 mai 2010, 09:31

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: