Problème d'encodage?

Mammouth du PHP | 568 Messages

22 janv. 2009, 15:57

Bonjour à tous,

Voici mon problème, j'ai créé un script PHP qui importe les données d'un fichier XLS et fait des traitemenst sur les chaines de cractères avant de la réenregistrer.

Tous fonctionne niquel, SAUF lorsque le caractère Œ est présent (idem avec le sigle €), cela me génère une ligne incompréhensible (comme si l'encodage de TOUTE la chaine était changé) avec des carré entre chqaue lettre.

Le seul moyen que j'ai trouvé de changé le Œ en OE est la façon suivante mais c'est crade et ne fonctionne pas bien puisqu'il y a des carré entre chaque lettre.
$data->sheets[0]['cells'][$i][$j] = str_replace("R","OE",$data->sheets[0]['cells'][$i][$j]);								
							$data->sheets[0]['cells'][$i][$j] = str_replace("S","oe",$data->sheets[0]['cells'][$i][$j]);			
Donc d'après mes recherches (ça fait une heure que je suis dessus :/ ) UTF8 ne contiendrai pas ces caractères ?!?!

En fait lorsque je lit le fichier excel (à partir d'un reader excel) je n'arrive pas à détecter la chaine Œ, au lieu de cela je lit R qui correspond à je ne sais quoi.

Précision: tout mon environnement de travail est défini en UTF8.

ViPHP
ViPHP | 3607 Messages

22 janv. 2009, 16:03

Bonjour,
Comment est-ce que tu récupères les données du fichier?
As-tu essayé de détecter l'encodage de ce dernier?
(genre http://fr2.php.net/mb_detect_encoding )

Mammouth du PHP | 568 Messages

22 janv. 2009, 16:08

Alors pour la totalité de ma chaine (qui est une concaténation de plusieurs mots), le résultat est le suivant:

Code : Tout sélectionner

ASCII -------------------------------------------------------------------------------- UTF-8 -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII -------------------------------------------------------------------------------- ASCII

ViPHP
ViPHP | 3607 Messages

22 janv. 2009, 16:11

Essaye alors de faire quelque chose avec
http://fr2.php.net/manual/fr/function.m ... coding.php

combiné à mb_detect_encoding()...
Je tatone avec toi hein? je sais pas trop si ça va changer quelque chose...

ViPHP
AB
ViPHP | 5818 Messages

22 janv. 2009, 16:13

Comme l'a dit jojolapine, il doit y avoir un problème quelque part dans ta chaine de traitement puisque
<?php	header('Content-type: text/html; charset=UTF-8');
$a = 'Œ5€';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php echo $a;?> // affiche bien 'Œ5€'
</body>
</html>
Sinon il y a ce tuto pour peut-être te donner des pistes.

Mammouth du PHP | 568 Messages

22 janv. 2009, 16:17

En fait le soucis provient principalement de EXCEL qui (apparement) encode ces caractères à ça façon.

Je viens d'essayer ceci qui ne fonctionne pas.
if(mb_detect_encoding($data->sheets[0]['cells'][$i][$j]) == "UTF-8"){
									echo mb_convert_encoding($data->sheets[0]['cells'][$i][$j],"ISO-8859-1", "UTF-8");
								}

ViPHP
ViPHP | 3607 Messages

22 janv. 2009, 16:19

Euh... atten là, je croyais que ton applciation était en utf-8, alors pourquoi vouloir convertir en ISO?
la conversion n'est utilie que de l'ascii pour aller vers l'utf-8 dans tonc cas ...

Mammouth du PHP | 568 Messages

22 janv. 2009, 16:23

Effectivement ^^ mais l'inverse ne fonctionne pas non plus, j'insiste sur le fait que Microsoft encode à ça façon les caractère sus-cité.

Prenez un fichier EXCEL tapez les caractères, enregistrez et essayez de récupérer le contenu du fichier pour voir.

Mammouth du PHP | 568 Messages

23 janv. 2009, 17:54

Solution trouvé, pour ne pas avoir de problème lors de l'écriture de données au format excel, il suffit d'utiliser le type d'encodage windows-1252

J'ai mis quasi une journée pour trouver la solution, donc j'espère que cela pourra aider qq'un.
$data = new Spreadsheet_Excel_Reader();		

//défini l'encodage de sortie
//important pour conserver les caractère entrelacé et les sigles spéciaux
$data->setOutputEncoding("windows-1252");

Kaptha
Invité n'ayant pas de compte PHPfrance

21 juin 2011, 12:32

Mec, je sais que ce thread est super vieux, mais j'ai été confronté au même soucis, et ça fait deux jours que je cherche.

Merci.

MERCI MERCI MERCI.

J'ai ENFIN réussi à résoudre ce problème d'encodage grâce à toi.

MERCI de faire partie des gens qui disent quand ils ont finalement trouvé la réponse.