problème de codage xml
4 messages
• Page 1 sur 1
- seabird
- WRInaute occasionnel

- Messages: 305
- Inscription: 1 Déc 2003
problème de codage xml
Bonjour,
Je récupère un fichier xml qui est encodé en US-ASCII que je mets en base de donnée mysql.
Dans la base j'ai donc les accents sous cette forme .
exemple:
& #233; => é
& #232;=>è
etc ......
J'ai crée un moteur de recherche dans la base.
Lorsque je cherche par exemple un mot avec accent tel que : " réalisation " , il ne le trouve pas vu apparemment qu'il est écrit sous cette forme " r& #233;alisation " dans la base.
Je ne vois pas trop comment m'en sortir.
Ce que j'ai fais pour l'instant ( ce qui n'est pas la meilleur méthode). Je récupérère le fichier xml, je remplace dedans " & #233; par é " et "& #232; par è " ainsi de suite et je le sauvegarde sous cette forme en bdd.
Maintenant le mot "réalisation" est bien trouvé mais le mot "realisation" sans accent n'est pas trouvé.
c'est terrible ces problèmes d'accent pfffff....
Quelqu'un a une idée pour m'en sortir?
Merci
Je récupère un fichier xml qui est encodé en US-ASCII que je mets en base de donnée mysql.
Dans la base j'ai donc les accents sous cette forme .
exemple:
& #233; => é
& #232;=>è
etc ......
J'ai crée un moteur de recherche dans la base.
Lorsque je cherche par exemple un mot avec accent tel que : " réalisation " , il ne le trouve pas vu apparemment qu'il est écrit sous cette forme " r& #233;alisation " dans la base.
Je ne vois pas trop comment m'en sortir.
Ce que j'ai fais pour l'instant ( ce qui n'est pas la meilleur méthode). Je récupérère le fichier xml, je remplace dedans " & #233; par é " et "& #232; par è " ainsi de suite et je le sauvegarde sous cette forme en bdd.
Maintenant le mot "réalisation" est bien trouvé mais le mot "realisation" sans accent n'est pas trouvé.
c'est terrible ces problèmes d'accent pfffff....
Quelqu'un a une idée pour m'en sortir?
Merci
- jcaron
- WRInaute accro

- Messages: 2678
- Inscription: 13 Fév 2004
Re: problème de codage xml
seabird a écrit:Je récupère un fichier xml qui est encodé en US-ASCII que je mets en base de donnée mysql.
Et tu le parses avec quoi? Des regexp, ou un vrai parser XML?
seabird a écrit:Dans la base j'ai donc les accents sous cette forme .
exemple:
& #233; => é
& #232;=>è
etc ......
Si tu utilisais un vrai parser XML il te décoderait les entités (tous les &...
seabird a écrit:Ce que j'ai fais pour l'instant ( ce qui n'est pas la meilleur méthode). Je récupérère le fichier xml, je remplace dedans " & #233; par é " et "& #232; par è " ainsi de suite et je le sauvegarde sous cette forme en bdd.
Je ne sais pas si c'est possible en php (en fait tu ne nous as même pas dit quel language tu utilises), mais en perl tu peux faire un
- Code: Tout sélectionner
s/&#(\d+);/chr($1)/eg
seabird a écrit:Maintenant le mot "réalisation" est bien trouvé mais le mot "realisation" sans accent n'est pas trouvé.
Ca ça peut être un peu plus compliqué. Il y a peut-être des moyens de faire ça automatiquement en mysql, sinon il faut pouvoir faire une décomposition des caractères Unicode et virer les diacritiques. En perl ça donne ça:
- Code: Tout sélectionner
use Unicode::Normalize;
my $word2 = NFD($word);
$word2 =~ s/\pM//g;
Mais après il faut gérer ça au niveau des index utilisés pour la recherche et tout ça. Comme tu utilises probablement les recherches fulltext de mysql, ce n'est probablement pas la bonne méthode.
Jacques.
- seabird
- WRInaute occasionnel

- Messages: 305
- Inscription: 1 Déc 2003
Tout d'abord j'ouvre le fichier xml avec fopen
j'utilise str_replace pour changer les codes:
& #233; => é
& #232;=>è
etc ......
je réenregistre ensuite le fichier ( fput) . ( par contre je n'arrive pas à avoir les retours chariot dans ce nouveau fichier, à la limite cela ne me gène pas)
Ensuite je parse le fichier obtenu avec cette fonction:
et j'enregistre les données obtenues dans la base mysql.
Voila en gros ce que je fais.
Mais j'ai ce problème d'accent ( je croyais que la recherche en base mysql était insensible à la casse)
Je rappelle donc que la recherche marche maintenant avec par exemple "réalisation" mais pas avec "realisation"
voila voila
j'utilise str_replace pour changer les codes:
& #233; => é
& #232;=>è
etc ......
je réenregistre ensuite le fichier ( fput) . ( par contre je n'arrive pas à avoir les retours chariot dans ce nouveau fichier, à la limite cela ne me gène pas)
Ensuite je parse le fichier obtenu avec cette fonction:
- Code: Tout sélectionner
function lit_xml1($fichier,$item,$champs) {
// on lit le fichier
if($chaine = @implode("",@file($fichier))) {
// on explode sur <item>
$tmp = preg_split("/<\/?".$item.">/",$chaine);
$nombre = sizeof($tmp);
// pour chaque <item>
for($i=1;$i<$nombre -1;$i+=2)
// on lit les champs demandés <champ>
foreach($champs as $champ) {
$tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
// on ajoute au tableau
$tmp3[$i-1][] = @$tmp2[1];
}
// et on retourne le tableau
return $tmp3;
}
}
et j'enregistre les données obtenues dans la base mysql.
Voila en gros ce que je fais.
Mais j'ai ce problème d'accent ( je croyais que la recherche en base mysql était insensible à la casse)
Je rappelle donc que la recherche marche maintenant avec par exemple "réalisation" mais pas avec "realisation"
voila voila
- seabird
- WRInaute occasionnel

- Messages: 305
- Inscription: 1 Déc 2003
ça y est je viens de trouver pourquoi " réalisation" était trouvé et pas "realisation"
En fait la base mysql était en latin1_general_ci , je l'ai mis en utf8_general_ci et maintenant cela fonctionne oufff...
Par contre , je vais quand même aller au bout des choses.
Comment dans le nouveau fichier que j'ai créé ( avant l'intégration en bdd) suite au remplacement des codes:
& #233; => é
& #232;=>è
etc ......
mettre les sauts de lignes ?
Même si cela n'est pas utile, j'aimerais quand même qu'il soit plus lisible si je dois aller y faire un tour.
J'utilise ce code :
Merci
En fait la base mysql était en latin1_general_ci , je l'ai mis en utf8_general_ci et maintenant cela fonctionne oufff...
Par contre , je vais quand même aller au bout des choses.
Comment dans le nouveau fichier que j'ai créé ( avant l'intégration en bdd) suite au remplacement des codes:
& #233; => é
& #232;=>è
etc ......
mettre les sauts de lignes ?
Même si cela n'est pas utile, j'aimerais quand même qu'il soit plus lisible si je dois aller y faire un tour.
J'utilise ce code :
- Code: Tout sélectionner
$fichier1 = file_get_contents('http://www.site.com/flux.xml');
$fichier1=str_replace("& #233;","é",$fichier1);
$fichier1=str_replace("& #232;","è",$fichier1);
$fichier1=str_replace("& #224;","à",$fichier1);
$fichier1=str_replace("& #234;","ê",$fichier1);
$fichier1=str_replace("& #239;","ï",$fichier1);
$fichier1=str_replace("& #235;","ë",$fichier1);
$fichier1=str_replace("& #251;","û",$fichier1);
$fichier1=str_replace("& #231;","ç",$fichier1);
$fichier1=str_replace("& #238;","î",$fichier1);
$fichier1=str_replace("& #226;","â",$fichier1);
$fichier1=str_replace("& #244;","ô",$fichier1);
$fp2 = fopen('essai.xml',"w");
fputs($fp2, "$fichier1");
fclose($fp2);
Merci
4 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Problème de codage avec IE
- PhpMyAnnu ou Categorizor probleme codage
- Problème de serveur ou problème de codage?
- MAIL illisible : problème de codage ou autre chose...
- XML+flash, problème d'accents
- Probleme dans ma sitemap.xml
- problème de taille de fichier xml
- Problème ouverture fichier XML
- probleme lorsque je parse un XML
- Problème lecture de fichier XML
Consultez la description détaillée des produits ou services de Google suivants : API Google Checkout
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
