Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3005 connectés 

  FORUM HardWare.fr
  Programmation
  XML/XSL

  rss, xml et caractères spéciaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

rss, xml et caractères spéciaux

n°916809
SOS - SOS
Posté le 07-12-2004 à 11:27:09  profilanswer
 

Salut tous,
 
J'ai mis en place un fil rss pour mon site www.planetebd.com et j'ai un petit pb que je n'arrive pas à résoudre.
 
Mon fil est là : http://www.planetebd.com/php/planetebd-rss-light.php
 
Et si vous le regarder, tous les caractères genre ', !, et autres, sont remplacés par un carré !!!
J'ai essayé :
- de changer le jeu de caractères du fichier xml, ca marche pas,
- d'utiliser les fonctions php htmlspecialchars, htmlentities, et ça change rien non plus!
 
Comment faire pour que le texte soit entièrement lisible???
 
Merci !!

mood
Publicité
Posté le 07-12-2004 à 11:27:09  profilanswer
 

n°916862
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 12:11:22  profilanswer
 

SOS - SOS a écrit :


Comment faire pour que le texte soit entièrement lisible???


 
ne pas faire du copier-coller depuis word ou faire une routine pour remplacer les caractères spéciaux par leurs entités html


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°916881
SOS - SOS
Posté le 07-12-2004 à 12:29:35  profilanswer
 

c'est ce que j'ai essayé bien sûr (c'est le htmlentities dont je parle au dessus).
 
Résultat, il me met une erreur sur un à .... (cf fichier en ligne : http://www.planetebd.com/php/planetebd-rss-light.php ) Comprend pas pourquoi çà le dérange.
Peut-etre que mon jeu de caractères n'est pas bon, l'ISO-8859-15 ???

n°916884
Mara's dad
Yes I can !
Posté le 07-12-2004 à 12:32:23  profilanswer
 

Tu le construit comment ton XML ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°916886
SOS - SOS
Posté le 07-12-2004 à 12:36:30  profilanswer
 

en php directement, avec une requete dans ma base, puis la contstruction du fichier rss ligne par ligne. J'ai rétabli la version sans les htmlentities, et le fichier s'affiche correctement, à part ces maudits accents, apostrophes, etc... !
Bouh !

n°916890
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 12:39:11  profilanswer
 

SOS - SOS a écrit :

c'est ce que j'ai essayé bien sûr (c'est le htmlentities dont je parle au dessus).


 
 
non, htmlentities() convertit une table par défaut - cf fonction get_html_translation_table().
 
Les caractères qui ne passent pas à l'affichage ne sont pas contenus dans ta table de conversion.
 
essayes d'appliquer ca pour voir :

Code :
  1. $text=str_replace ('’', '& #8217;', $text);


 
supprimes l'espace entre & et #8217;


Message édité par simogeo le 07-12-2004 à 12:40:08

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°916893
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 12:43:47  profilanswer
 

Je viens de checker de nouveau ton code .. je suis sur que c'est ca ....
 
Par exemple les ... après le mot Caraïbes.
 

Code :
  1. $text=str_replace ('…', '& #8230;', $text);


 
 
 
tjrs en supprimant l'espace entre & et #8230;! ...   Moi je le mets sinon le forum les interpréte


Message édité par simogeo le 07-12-2004 à 12:44:51

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°916907
Mara's dad
Yes I can !
Posté le 07-12-2004 à 13:10:16  profilanswer
 

Et avec DOM, au lieu de bricoler ?
 
<?php
 
$d = domxml_new_doc("1.0" );
$root = $d->add_root("root" );
$node = $d->create_element("para" );
$text = $d->create_text_node( utf8_encode( "Bonjour les zamis ! Z'allez bien ? Fait bô non ?" ) );
$node->append_child( $text );
$root->append_child($node);
echo $d->dump_mem();
 
?>


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°916918
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 13:18:51  profilanswer
 

Mara's dad a écrit :

Et avec DOM, au lieu de bricoler ?


 
je lui explique d'ou vient son problème, mes exemples sont là pour illustrer mes propos, je ne les présente pas comme LA solution
 
Concernant le DOM, ca n'a rien a voir avec le problème initial du posteur.
Du reste, je t'accorde que c'est plus propre.


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°916962
gilou
Modérateur
Modzilla
Posté le 07-12-2004 à 13:43:22  profilanswer
 

Mara's dad a écrit :

Et avec DOM, au lieu de bricoler ?
 
<?php
 
$d = domxml_new_doc("1.0" );
$root = $d->add_root("root" );
$node = $d->create_element("para" );
$text = $d->create_text_node( utf8_encode( "Bonjour les zamis ! Z'allez bien ? Fait bô non ?" ) );
$node->append_child( $text );
$root->append_child($node);
echo $d->dump_mem();
 
?>


Ça, c'est bien!
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
mood
Publicité
Posté le 07-12-2004 à 13:43:22  profilanswer
 

n°916966
Mara's dad
Yes I can !
Posté le 07-12-2004 à 13:44:36  profilanswer
 

Merci chef :jap:


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°916971
Mara's dad
Yes I can !
Posté le 07-12-2004 à 13:50:07  profilanswer
 

simogeo a écrit :

Concernant le DOM, ca n'a rien a voir avec le problème initial du posteur.
Du reste, je t'accorde que c'est plus propre.

Si justement !
Avec le DOM normalement, quand tu demande :
$monDoc->create_text_node( "MonTexteBrut" );
T'a pas à te poser la question des caractères spéciaux.
Il sont normalement encodés comme déclaré dans le Document.
 
Bon, en PHP, c'est pas encore au point, et il faut par exemple utiliser utf8_encode, surtout qu'il n'y a pas de solution simple pour indiquer le codage du document. Mais c'est comme ça qu'il faut faire pour être tranquile, et ça répond à la question du monsieur. :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°916976
SOS - SOS
Posté le 07-12-2004 à 14:04:35  profilanswer
 

ok ok pardon g T allé bouffer... Je vais tenter le DOM car le coup des str_replace me semble un peu compliqué (si il faut que je l'applique avec tous les caractères susceptibles de m'embeter...)

n°917133
SOS - SOS
Posté le 07-12-2004 à 15:44:38  profilanswer
 

Citation :

Si justement !  
Avec le DOM normalement, quand tu demande :  
$monDoc->create_text_node( "MonTexteBrut" );  
T'a pas à te poser la question des caractères spéciaux.  
Il sont normalement encodés comme déclaré dans le Document.  
 
Bon, en PHP, c'est pas encore au point, et il faut par exemple utiliser utf8_encode, surtout qu'il n'y a pas de solution simple pour indiquer le codage du document. Mais c'est comme ça qu'il faut faire pour être tranquile, et ça répond à la question du monsieur. :D


 
bon j'ai suivi ton conseil... Mais alors bonjour le résultat :D
J'ai encodé systématiquement mes chaines de caractères, issues de mysql, en utf8. En revanche, je ne sais pas du tout comment je rajoute encoding="utf-8"  dans le tag xml???
J'ai fati cela dans le fichier suivant : http://www.planetebd.com/php/test.php qui, tu vas le voir, indique pleins de bizarreries au niveau de l'affichage de pleins de caractères. On dirait que j'ai regressé, même si je sens que je ne suis pas trop loin de la soluce !!!

n°917146
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 15:59:52  profilanswer
 

SOS - SOS > ton fichier doit être enregistré au format utf-8!
 
Mara's dad > uiui :jap:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°917166
SOS - SOS
Posté le 07-12-2004 à 16:13:32  profilanswer
 

ben oui mais justement, comment je fais????
echo utf8_encode($doc->dump_mem()) ?

n°917193
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 16:26:02  profilanswer
 

SOS - SOS a écrit :

ben oui mais justement, comment je fais????
echo utf8_encode($doc->dump_mem()) ?


 
non, ton éditeur de code dois te permettre un enregistrement en utf-8
 
exemple avec le blc note windows :
 
Enregistrer Sous > Codage -par défaut c'est de l'ANSI, choisir UTF-8


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°917194
Profil sup​primé
Posté le 07-12-2004 à 16:26:29  answer
 

l'utf8 ca susk :o

n°917215
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 16:46:04  profilanswer
 


 
U 2 [:itm]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°917216
SOS - SOS
Posté le 07-12-2004 à 16:46:24  profilanswer
 

bon, ca me parait mal barré tout cela. Si j'enregistre mon fichier en UTF8, tout déconne puisque mon serveur supporte le US-ASCII...
Bref, je sens que ce problème n'a aucune solution, ca me déprime !!! Bouh !! Pourquoi le monde est-il si cruel???

n°917217
Mara's dad
Yes I can !
Posté le 07-12-2004 à 16:46:53  profilanswer
 

SOS - SOS a écrit :

En revanche, je ne sais pas du tout comment je rajoute encoding="utf-8"  dans le tag xml???
J'ai fati cela dans le fichier suivant :


 
Je l'ai dit plus haut que c'est possible !
 
C'est un peu du bricolage, mais bon ça marche bien :D
 

<?php
header('Content-type: text/xml');
$d = domxml_open_mem( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root />" );
$root = $d->document_element();
$node = $d->create_element("para" );
$text = $d->create_text_node( utf8_encode( "Bonjour les zamis ! Z'allez bien ? Fait bô non ?" ) );
$node->append_child( $text );
$root->append_child($node);
echo $d->dump_mem();
?>


 
EDIT : C'est mieux avec le header . . .


Message édité par Mara's dad le 07-12-2004 à 16:51:33

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917221
simogeo
j'ai jamais tué de chats, ...
Posté le 07-12-2004 à 16:54:17  profilanswer
 

Mara's dad a écrit :

Je l'ai dit plus haut que c'est possible !
 
C'est un peu du bricolage, mais bon ça marche bien :D
 

<?php
$d = domxml_open_mem( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root />" );
$root = $d->document_element();
$node = $d->create_element("para" );
$text = $d->create_text_node( utf8_encode( "Bonjour les zamis ! Z'allez bien ? Fait bô non ?" ) );
$node->append_child( $text );
$root->append_child($node);
echo $d->dump_mem();
?>




 
m'etonnerait que ca change grand chose sur le coup.
La page me renvoie déjà un codage en UTF-8.  
 
(Firefox > Page Info > Encoding)


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°917226
Mara's dad
Yes I can !
Posté le 07-12-2004 à 17:06:57  profilanswer
 

Autre solution plus propre mais pas documentée :
 
$d = domxml_new_doc("1.0" );  
$d->encoding = "UTF-8";
 
Pour voir les propriétés de $d :
echo( "<pre>" );
print_r( $d );
echo( "</pre>" );
:D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917230
SOS - SOS
Posté le 07-12-2004 à 17:11:46  profilanswer
 

bon. Ca marche pas ! Je laisse tomber cette solution, et je vais prendre le problème en amont. Je vais virer tous les caractères spéciaux bizarroides de ma base de données, genre ..., ' et autres... Merci en tout cas pour votre aide (c un sacré merdier cette gestion des caractères...)

n°917233
SOS - SOS
Posté le 07-12-2004 à 17:14:44  profilanswer
 

pour mara's dad : ca me fait une erreur Call to a member function on a non-object in blabla...
Je pense qu'il n'y a donc pas de vraie solution à ce pb, je vais donc virer tout ces caractères pourris de ma base !
Na !

n°917235
Profil sup​primé
Posté le 07-12-2004 à 17:18:37  answer
 

replace le $d par ton objet hein :D

n°917247
Mara's dad
Yes I can !
Posté le 07-12-2004 à 17:28:15  profilanswer
 

SOS - SOS a écrit :

pour mara's dad : ca me fait une erreur Call to a member function on a non-object in blabla...
Je pense qu'il n'y a donc pas de vraie solution à ce pb, je vais donc virer tout ces caractères pourris de ma base !
Na !


SISI y'en a une !
Faut juste se calmer et suivre ce qui se passe.
Si tu ne peut pas utiliser la propritété encoding, la solution
domxml_open_mem( "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><root />" )
doit marcher.
Si les caractères de ta base sont en ISO-8859-1, essayes de ne pas utiliser utf8_encode()...
 
En tout cas, utiliser DOM est quasiment la seule solution qui t'assure d'avoir un document XML bien formé en sortie.
 
Sinon, regarde du coté de iconv :  
iconv("ISO-8859-1", "UTF-8", "This is a test." ) ou le contraire.
 
Fais des tests avec ce que tu as en base.


Message édité par Mara's dad le 07-12-2004 à 17:28:48

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917255
SOS - SOS
Posté le 07-12-2004 à 17:44:43  profilanswer
 

désolé mais comprend pas ce que tu me dis de faire.
Pourquoi je mettrai 'root' dans mon fichier xml? Si je le met, feedvalidator.org me dit Undefined root element: root  et si ne l'enleve, Call to a member function on a non-object  ...

n°917262
Mara's dad
Yes I can !
Posté le 07-12-2004 à 17:51:30  profilanswer
 

root, c'est un exemple !
C'est pour la fontion domxml_open_mem().
Si tu ne lui passe pas au moins un noeud racine, ce n'est pas un document valide :D
 
Est-ce que tu peut faire ça :
 
$d = domxml_new_doc("1.0" );  
$d->encoding = "TON ENCODING PREFERE";
 
?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917824
SOS - SOS
Posté le 08-12-2004 à 12:02:52  profilanswer
 

Yes !
Ca fonctionne, mais mon feed affiche toujours pleins de caractères zarbes :
http://www.feedvalidator.org/check [...] Ftest3.php
 
Mon dieu quel enfer !!!

n°917843
push
/dev/random
Posté le 08-12-2004 à 12:23:19  profilanswer
 

j'ai pas tout lu mais http://www.planetebd.com/php/planetebd-rss-light.php est ok
 
et http://www.planetebd.com/php/test3.php est foireux, quel diff entre les 2 ?
 
edit: j'ai rien dit..


Message édité par push le 08-12-2004 à 12:25:01
n°917847
SOS - SOS
Posté le 08-12-2004 à 12:26:30  profilanswer
 

Le problème, c'est qu'aucuns des deux n'est correct justement.
- http://www.planetebd.com/php/planetebd-rss-light.php : developpé en php directement, avec un encoding="ISO-8859-15"
- http://www.planetebd.com/php/test3.php : developpé en php avec les composants dom, tout encodé en utf8
 
Dans les deux cas, j'arrive pas à faire en sorte qu'il n'y ait plus de caractères bizarres (et d'ailleurs, dans les deux cas, ce ne sont pas forcement les mêmes)
 
Pour le premier (planetebd-rss-light.php) je crois avoir tout essayé : htmlentities, htmlspecialchar et autres fonctions, rien n'y fait...

n°917872
push
/dev/random
Posté le 08-12-2004 à 12:58:19  profilanswer
 

ca n'a peut-être rien avoir mais essaye de mettre dans un .htaccess AddDefaultCharset UTF-8 ou AddDefaultCharset ISO-8859-1 selon le cas, on sait jamais  :??:

n°917913
Mara's dad
Yes I can !
Posté le 08-12-2004 à 13:45:31  profilanswer
 

Pourquoi y'a pas 'encoding="UTF-8"' dans ton xml généré par test3.php ?
 
Les caractères zarbi sont : & #x8D25; et & #x9973;
& #x8D25; remplace 'ète' et devrait être '& #xE8;te'
& #x9973; remplace 'ées' qui plus loin s'écrit normalement '& #xE9;es'
 
Pourquoi le début du fichier est-il comme ça ?
Les tags title, description, dc:publisher, dc:creator, et dc:rights sont touchés et pas le reste.
Ont-ils doit à un traitement particulier ?
Viennent-ils de la même source ?
 


Message édité par Mara's dad le 08-12-2004 à 13:46:33

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917924
Mara's dad
Yes I can !
Posté le 08-12-2004 à 13:53:42  profilanswer
 

Sinon, dans ton fichier généré par planetebd-rss-light.php, les caractères zarb sont des : ’ Code ascii 0x92
au lieu de ' Code ascii 0x27
 
En fait ton problème, c'est tes données qui sont foireuses !
 
Y'aurait pas un Mac la dessous ? ? ?
 
PS : les ’ ne s'affichent même pas dans la version test3.php ! ! !


Message édité par Mara's dad le 08-12-2004 à 13:56:04

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917940
simogeo
j'ai jamais tué de chats, ...
Posté le 08-12-2004 à 14:05:56  profilanswer
 

Mara's dad a écrit :


En fait ton problème, c'est tes données qui sont foireuses !


 
[:noxauror]
tu jeteras un oeil à mes premiers posts!


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°917952
Mara's dad
Yes I can !
Posté le 08-12-2004 à 14:12:15  profilanswer
 

simogeo a écrit :

[:noxauror]
tu jeteras un oeil à mes premiers posts!


Put... mais t'as raison :jap:
J'ai du trop forcer sur la roulette de la souris :/
 
Bon, il faut qu'il corrige ses données à la source. Il va pas monter une usine à gaz pour corriger ce genre de pb 'on the fly' tout de même


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°917957
simogeo
j'ai jamais tué de chats, ...
Posté le 08-12-2004 à 14:18:53  profilanswer
 

Mara's dad a écrit :


Bon, il faut qu'il corrige ses données à la source. Il va pas monter une usine à gaz pour corriger ce genre de pb 'on the fly' tout de même


 
J'ai mis une moulinette de ce type en place pour un CMS car pas de contrôle au niveau utilisateur.
Y'a pas 36 solutions dans ce cas là.
 
Dans son cas, s'il est seul à gérer son site. Vaut mieux qu'il fournisse des données intégres en effet.


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
n°917972
SOS - SOS
Posté le 08-12-2004 à 14:30:07  profilanswer
 

bon, ben c'est bien ce que je pensais, et on pense donc pareil, mes données sont merdiques. J'avoue faire parfois un copié collé depuis Word, et notamment, il semblerait que les points de suspension ... soit transformés en un seull caractère bizarre, idem pour le '... Je vais te changer tout cela moi, ca va être vite vu ! En tout cas, super merci de m'avoir aidé !

n°917975
SOS - SOS
Posté le 08-12-2004 à 14:41:35  profilanswer
 

Ah C'est beau !!!
 
Avec deux str_replace sur les caractères affreux : … et ’ remplacés par ... et ', mon fil RSS est si beau !
Avis aux prochains qui galèrerait sur le même problème, l'idéal est de tout passer en utf8, d'utiliser
 
 $doc = domxml_new_doc("1.0" );
 $doc->encoding = "utf-8";  
 
et d'utiliser les dom... Puis de régler les pbs de caractères par des update directement dans la BDD !!!
 
Deux jours entiers pour en arriver à cette conclusion... grrrrrrrr

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  rss, xml et caractères spéciaux

 

Sujets relatifs
Comment enlever les caractères spéciaux de word ?[php]accent, caractères spéciaux, strtr
protection caracteres speciauxQuestions sur Les caractéres spéciaux
caracteres spéciaux MAC -> PCAfficher des caracteres speciaux dans printf....
Caracteres spéciaux en DOMpb caractères spéciaux
[PHP] caracteres speciaux[JAVA] supprimer les caractères spéciaux dans une chaine
Plus de sujets relatifs à : rss, xml et caractères spéciaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR