Page 1 sur 1

lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 15:21
par laurentsc
Bonjour,

je récupère en PHP une liste de noms issue d'un fichier xls, et pour chacun de ces noms, je construis une url :
$url="http://---=".$lastname.","
et ensuite je lis le fichier xml pointé par cette url :
$res=$dom->load($url);  
  $listeText = $dom->getElementsByTagName('text');
  $i=0;
    if ($res) { foreach($listeText as $text) {
	
	if (!(($i++)%3)) {

    $patronyme=strtolower($text->firstChild->nodeValue);
	echo "patr=".$patronyme."<br>";
}}}
Bien sûr, ce code n'est qu'essai.
En général, l'encodage de l'URL (récupéré par mb_detect_encoding($url) ) est de l'ASCII et ça se passe bien ; par contre, il y a un problème si le patronyme est composé en plusieurs morceaux et qu'il vient de ce fichier xls (car si je mets en dûr $lastname="nom en plusieurs parties", ça se passe bien aussi). C'est donc clairement un problème d'encodage. Quelqu'un saurait-il comment je peux m'en sortir ?

Re: lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 15:33
par macgawel
En général, l'encodage de l'URL (récupéré par mb_detect_encoding($url) ) est de l'ASCII et ça se passe bien ; par contre, il y a un problème si le patronyme est composé en plusieurs morceaux et qu'il vient de ce fichier xls (car si je mets en dûr $lastname="nom en plusieurs parties", ça se passe bien aussi).
Bonjour.

Quel est le problème au juste ?
Si j'ai bien compris, c'est la récupération du nom à partir du fichier XLS qui pose problème ? Dans ce cas, pourquoi n'avoir pas mis le code correspondant ?
Toujours si j'ai bien compris, c'est l'URL créée qui est foireuse. Vu que l'URL générée "en dur" est correcte, il faudrait comparer le patronyme récupéré sur le XLS avec celui "en dur"...

Re:[résolu] lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 15:57
par laurents
Quel est le problème au juste ?
Tu as raison ; j'ai sauté des points importants, mais tu as bien deviné : c'est la récupération de ce nom depuis le xls qui n'est pas bonne. Voici un extrait du code de récupération des données :
require_once 'excel_reader2.php';
if (isset($_SESSION['nom_fichier'])) 
{ 
$ind=0;
$data = new Spreadsheet_Excel_Reader($_SESSION['nom_fichier']);
$patr="2";
$lastname=$data->val($patr,"3");

while (isset($lastname)&&($lastname!="")) { 
$lastname=$data->val($patr,"3");
$firstname=$data->val($patr,"4");
$patr++;
if ($lastname!="") 
{
$user[$ind]=$lastname.'|'.$firstname;
$ind++;
}}
Je ne connais pas le fichier 'excel_reader2.php' car je m'appuie sur cet outil. Tout ce que je peux dire, c'est qu'il y a environ 1700 lignes de code...
Et pour comparer le nom du xls avec celui en dûr, tu imagines quoi, vu que si je fais un echo, ils sont identiques (d'où ma pensée à un problème d'encodage) ?

Re: lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 16:09
par macgawel
Et pour comparer le nom du xls avec celui en dûr, tu imagines quoi, vu que si je fais un echo, ils sont identiques (d'où ma pensée à un problème d'encodage) ?
Si j'ai bien suivi, tu prends ton fichier XLS, tu extrais les noms et tu t'en sers pour générer une URL ?
Il faudrait comparer cette URL avec celle que tu obtiens en utilisant le nom en dur...

Re: lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 16:29
par laurents
Ce ne sont pas les mêmes :
 echo "comparaison:".strcmp($url,$url_dur)."<br>";
  echo "url:".$url."<br>";
  echo "url_dur:".$url_dur."<br>";
et d'ailleurs, le echo le montre : en dûr, il y a espace, et récupéré du xls, l'espace est remplacé par un carré (d'où encore une fois, je pense à un problème d'encodage). Mais que faire ?

Re: lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 16:51
par macgawel
Ce ne sont pas les mêmes :
 echo "comparaison:".strcmp($url,$url_dur)."<br>";
  echo "url:".$url."<br>";
  echo "url_dur:".$url_dur."<br>";
et d'ailleurs, le echo le montre : en dûr, il y a espace, et récupéré du xls, l'espace est remplacé par un carré (d'où encore une fois, je pense à un problème d'encodage). Mais que faire ?
Comme quoi il y a une différence :mrgreen:

- Il y a des différences/problèmes avec les accents ? Parce que c'est souvent les premiers trucs qui prennent en cas de problème d'encodage.
- Ce qui serait bien, ce serait de savoir à quoi correspond ce "carré". Voir la fonction ord().
- A partir de là, une solution simple, c'est de passer la chaîne à la moulinette, pour transcrire les carrés en blanc...

Accessoirement, l'usage d'espaces est déconseillé dans les URL :roll:

Re:[résolu] lecture d'un fichier xml : encodage ?

Posté : 14 nov. 2011, 17:44
par laurents
Grâce à ton aide, c'est résolu (un tout grand merci) : j'ai commencé comme tu me le conseillais par utiliser ord ; j'ai ainsi vu le code ascii du carré, puis je l'ai remplacé par 32 :
$url=str_replace(chr(160),chr(32),$url);
(le code du carré est 160)
Et je sais bien que les espaces ds les urls, c'est pas terrible (Windows n'aime pas), mais ces fichiers xml, je ne les choisis pas (ils sont présents sur un intranet et sont liés au carnet d'adresse).