Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/11/2007, 13h16   #1
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Par défaut [DOM] XML, ISO et accents

Bonjour,

J'ai sur mon site un flux RSS pour les derniers articles. Voilà le problème : je suis en iso-8859-1 et j'ai encodé mes accents. Exemple :

Code :
1
2
3
4
5
6
<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
<title>Mon-site.com</title>
<link>http://www.mon-site.com</link>
<description>Description accentu&eacute;e</description>
L'encodage du é en &eacute; génère des erreurs du flux RSS. Or si je remet le "é", il s'affiche en "?". Je souhaiterais conserver cet encodage, mais je n'arrive pas à afficher correctement ces accents, en visant aussi la validation du flux (http://feedvalidator.org dans un second temps).

Merci 'avance pour votre aide !

Jarodd
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 14h09   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Ce sont des entités HTML qui ne sont pas valables en XML sans les redéfinir. Quel est le code associé ? Les extensions basées sur libxml2 (DOM, DOMXML et SimpleXML par exemple) utilisent en interne un encodage UTF-8 par défaut, donc il ne faut pas oublier de les décoder (utf8_decode) lors d'une lecture et de les encoder (utf8_encode) pour une écriture.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 14h20   #3
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Ouhla j'ai pas compris grand-chose

En gros je dois faire quoi, passer mon flux en UFT-8 ?
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 14h35   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Jarodd
En gros je dois faire quoi, passer mon flux en UFT-8 ?
Non pas nécessairement mais je ne puis vous répondre car vous n'êtes pas assez précis : on ne sait pas quel encodage vous utilisez ni la manière dont vous exploitez, avec PHP, ce "flux".

Oui les entités HTML (&eacute; par exemple) ne sont reconnues que par le langage HTML. Si vous souhaitez en faire usage en XML il vous faut les redéfinir mais vous ne devriez pas en avoir besoin dans la mesure où les encodages les "utilisant" gère déjà de tels caractères (ISO-8859-1 comme UTF-8, entre autres).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 15h26   #5
Membre du Club
 
Avatar de Jarodd
 
Inscription : août 2005
Messages : 258
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 258
Points : 63
Points : 63
Ok je vais essayer de préciser.

J'ai une page php qui gère l'extraction des données et qui génère ensuite le flux RSS (et redirige à la fin vers la page .xml, avec toutes les données).

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$xml = '<?xml version="1.0" encoding="iso-8859-1"?>';
$xml = '<rss version="2.0">';
$xml .= '<channel>'; 
$xml .= '<title>Mon-site.com</title>';
$xml .= '<link>http://www.mon-site.com</link>';
$xml .= '<description>Description accentu&eacute;e</description>';
 
// connexion à la bdd + requêtes d'extraction
/* ... */
 
$xml .= '</channel>';
$xml .= '</rss>';
 
// écriture dans le fichier xml, notamment <description>. 
$fp = fopen("mon_fichier.xml", 'w+');
fputs($fp, $xml);
fclose($fp);
@mysql_close();
 
header("Location: ./ma_page.xml");
 
?>
Je n'ai pas de problème avec les accents du contenu de la bdd (ça rejoint ce que tu dis puisque les accents sont alors en HTML. Là où ça coince c'est sur les balises xml, mais s'il faut les redéfinir, je ne sais pas comment. J'espère que c'est plus clair ?
Jarodd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2007, 16h45   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par Jarodd
Je n'ai pas de problème avec les accents du contenu de la bdd (ça rejoint ce que tu dis puisque les accents sont alors en HTML.
C'est inutile puisque comme on peut le voir ça limite tout de suite la réutilisation de vos données ...

Vous ne nous avez pas donné l'encodage utilisé par votre base (et connexion) mais si c'est de l'UTF-8, il faut faire un utf8_decode avant d'ajouter vos données à votre flux. Sinon ça ne posera pas de problème. Et pour convertir les entités HTML en caractères "normaux", vous pouvez normalement y arriver avec la fonction html_entity_decode (ça sera plus simple et plus lisible).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h04.


 
 
 
 
Partenaires

Hébergement Web