Page 1 sur 1

caractères spéciaux

Posté : 30 juil. 2012, 16:10
par chessmancaryl
Mon problème consiste à afficher les caractères spéciaux mais je ne sais pas lesquels exactement.
car les é et à s'affichent correctement
Voilà le résultat l'Association "Basma",

Si quelqu'un a des idées?
merci d'avance.

Re: caractères spéciaux

Posté : 30 juil. 2012, 17:32
par xTG
Tu as un problème d'encodage je dirai.
Un peu de lecture : faq-tutoriels/encodage-utf-t245062.html

Re: caractères spéciaux

Posté : 30 juil. 2012, 22:35
par Ryle
C'est pas tant un soucis d'encodage... la chaîne """ correspond à l'entité html des guillemets. C'est donc plutôt un appel à htmlspecialchars ou htmlentities alors que ces caractères de la chaîne sont probablement déjà des entités html.

En gros ta chaine < "Basma" > est en réalité < "Basma" > (ce qui affiche bien "Basma") et quand tu fait appel à l'une de ces fonctions, cela devient < &quot;Basma&quot; > (ce qui affiche donc "Basma")

Re: caractères spéciaux

Posté : 30 juil. 2012, 22:37
par chessmancaryl
Le problème est que le fichier s'affiche correctement sur le navigateur.
En effet, j'extrais des infos d'une base avec du code php.
Sur le navigateur les accents apparaissent normalement mais sur
mon application android non.:(

Re: caractères spéciaux

Posté : 30 juil. 2012, 22:41
par chessmancaryl
C'est pas tant un soucis d'encodage... la chaîne """ correspond à l'entité html des guillemets. C'est donc plutôt un appel à htmlspecialchars ou htmlentities alors que ces caractères de la chaîne sont probablement déjà des entités html.

En gros ta chaine < "Basma" > est en réalité < "Basma" > (ce qui affiche bien "Basma") et quand tu fait appel à l'une de ces fonctions, cela devient < &quot;Basma&quot; > (ce qui affiche donc "Basma")
Merci pour la réponse
Mais je ne comprends pas tjs ce que je dois faire.
:(

Re: caractères spéciaux

Posté : 30 juil. 2012, 22:43
par Ryle
Euh... oui... c'est normal... ton application androïd n'étant pas un navigateur internet, elle n’interprète probablement pas le code html et affiche le texte tel quel. Donc si dans ta base, ton texte est encodé, ton application ne le décodera pas.

La bonne pratique dans ce cas consiste à stocker des chaines non encodées en base, et les encoder à l'affichage en fonction du support qui va les utiliser :)

Re: caractères spéciaux

Posté : 30 juil. 2012, 22:47
par chessmancaryl
Euh... oui... c'est normal... ton application androïd n'étant pas un navigateur internet, elle n’interprète probablement pas le code html et affiche le texte tel quel. Donc si dans ta base, ton texte est encodé, ton application ne le décodera pas.

La bonne pratique dans ce cas consiste à stocker des chaines non encodées en base, et les encoder à l'affichage en fonction du support qui va les utiliser :)

Une question si vous permettez.
En fait, avec mon application android je suis entrain de lire le fichier en local.
càd que je l'ai dans l'un des dossiers.
La question: quand je fais entrer ce fichier avec une URL càd avec une connexion Internet,
le problème sera -t-il résolu?

Une autre question: que fait CDATA? et est ce que html_entities_encode est utilisé dans CDATA?

Re: caractères spéciaux

Posté : 31 juil. 2012, 13:39
par Ryle
Alors on va commencer par le début :)

Quand tu ouvres ton fichier source avec un bloc note, est-ce que tu as des guillemets ( " ) ou des entités html (") ? Car c'est cette chaine que ton application android va traiter et afficher.

Concernant les CDATA, tu les utilises en xml pour indiquer que le contenu qu'ils délimitent ne doit pas être traité par le parseur (tu peux donc y placer des balises xml, du html, ... sans altérer la structure de ton fichier xml)

Re: caractères spéciaux

Posté : 01 août 2012, 13:42
par chessmancaryl
Alors on va commencer par le début :)

Quand tu ouvres ton fichier source avec un bloc note, est-ce que tu as des guillemets ( " ) ou des entités html (") ? Car c'est cette chaine que ton application android va traiter et afficher.

Concernant les CDATA, tu les utilises en xml pour indiquer que le contenu qu'ils délimitent ne doit pas être traité par le parseur (tu peux donc y placer des balises xml, du html, ... sans altérer la structure de ton fichier xml)
Bonjour

En fait j'ai les &quot.
En effet ma base a pour Interclassement pour la connexion MySQL: utf8-general-ci
Voilà la première partie de mon code php:

@mysql_connect($host,$user,$pwd) or die("Connexion impossible");
@mysql_select_db($base) or die("Echec de selection de la base");
$xml = '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">';
$xml .= '<channel>';
$xml .= '<title>Orange Tunisie</title>';
$xml .= '<link>http://www.orange.tn</link>';
$xml .= '<description><![CDATA[(A la Une de l\'actualité)]]></description>';


mysql_query('set names utf8');
$res=mysql_query("SELECT * FROM items );
....
puis vers la fin j'insère la ligne suivante:
$fp = fopen("people.xml", 'w+');
fputs($fp, utf8_encode ($xml));

J'ai modifié l'encoding du notepad++ en ut8 aussi
Voilà le résultat :

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Orange Tunisie</title><link>http://www.orange.tn</link><description><![CDATA[(A la Une de l'actualité)]]></description><item><title>Collision entre un camion et deux trains</title><description><p>TUNIS, 31 juil 2009 (TAP) - Une collision entre un train de voyageurs en provenance de Tunis se dirigeant vers Sousse et un camion a eu lieu, vendredi, au passage à niveau de Fondouk Jedid (Gouvernorat de Ben Arous).</p></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>6e édition des dimanches sans voiture</title><description><p>TUNIS, 1er ao&ucirc;t 2009 (TAP) - La ville de Tunis organise la sixi&egrave;me édition des Dimanches sans voiture. La manifestation est prévue les 2, 9 et 16 ao&ucirc;t à l&rsquo;avenue Habib Bourguiba et ce de 20h00 à 23h00. Ces soirées seront animées par des spectacles de musique et de danse. </p> </description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>Monastir : 9ème session du festival du Cherkaw</title><description> <p>L'organisation d'une grande table de dégustation du "Cherkaw" a marqué l'ouverture de la 9&egrave;me session du festival du Cherkaw qui se poursuit jusqu'au 9 ao&ucirc;t courant.</p></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>Le Kef: Fête du Bourzguène àl'approche des moissons </title><description> <p>LE KEF, 12 mai 2010 (TAP) - L'Association de sauvegarde de la Médina du Kef cél&egrave;bre, du 13 au 16 mai 2010, la traditionnelle f&ecirc;te du Bourzgu&egrave;ne: un festival qui marque la fin du printemps et l'imminence de la saison des moissons. </p></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>Caravane de solidarité sanitaire de l'Association "Basma", àSidi Bouzid </title><description> <p>SIDI BOUZID, 12 mai 2010 (TAP) - L'Association "Basma" pour la promotion de l'emploi des handicapés, que préside Mme Le&iuml;la Ben Ali, épouse du président de la République, a organisé, mercredi, une caravane de solidarité sanitaire dans le Gouvernorat de Sidi Bouzid, dont les prestations ont bénéficié à plus de 1000 familles résidant dans les zones reculées des délégations de Jelma, de Sidi Ali Bou Aoun, de Meknassi et de Menzel Bouza&iuml;ene. </p></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item></channel></rss>

Vous remarquez bien les Fête Médina ....
:(

Re: caractères spéciaux

Posté : 01 août 2012, 15:19
par Ryle
Ok, alors il y a deux choses à distinguer :

- le problème d'entité html (tout ce qui commence par "&" et se termine par ";" : la 9&egrave;me session, au 9 ao&ucirc;t ... cela est probablement du à un appel à htmlentities() ou html_special_chars() avant l'enregistrement de tes données en base. Du coup les accents, guillemets et autre caractères sont encodés en entités html û devient &ucirc;, è devient &egrave; etc.

Pour éviter cela, il ne faut pas encoder les données que tu enregistres en base (de façon à garder un texte avec des û é à, ... dans ta base de données pour pouvoir l'exploiter à ta guise). En revanche, tu peux les encoder à la volée quand tu affiches les données de ta base avec php pour qu'on puisse les consulter avec un navigateur.

- le problème d'encodage iso / utf8. En effet, le caractère é enregistré en iso et affiché en utf8 va donner un é : Ces soirées seront animées. Il faut donc t'assurer que ta base de données est bien en ut8 lorsque tu la lis, mais également lorsque tu y écris.

Re: caractères spéciaux

Posté : 01 août 2012, 15:52
par chessmancaryl
Ok, alors il y a deux choses à distinguer :

- le problème d'entité html (tout ce qui commence par "&" et se termine par ";" : la 9&egrave;me session, au 9 ao&ucirc;t ... cela est probablement du à un appel à htmlentities() ou html_special_chars() avant l'enregistrement de tes données en base. Du coup les accents, guillemets et autre caractères sont encodés en entités html û devient &ucirc;, è devient &egrave; etc.

Pour éviter cela, il ne faut pas encoder les données que tu enregistres en base (de façon à garder un texte avec des û é à, ... dans ta base de données pour pouvoir l'exploiter à ta guise). En revanche, tu peux les encoder à la volée quand tu affiches les données de ta base avec php pour qu'on puisse les consulter avec un navigateur.

- le problème d'encodage iso / utf8. En effet, le caractère é enregistré en iso et affiché en utf8 va donner un é : Ces soirées seront animées. Il faut donc t'assurer que ta base de données est bien en ut8 lorsque tu la lis, mais également lorsque tu y écris.
Merci bcp pr la réponse.
Le problème est que je n'ai pas le droit de toucher à la base.
J'y accède uniquement en lecture.
Le contraire de htmlentities() ou html_special_chars() n'existe -t-il pas?
:(

Re: caractères spéciaux

Posté : 01 août 2012, 20:22
par Ryle
Un p'tit coup d'oeil à la doc de ces fonctions t'aurait tout de suite donné la réponse : html_entity_decode ;)

Ca c'est pour virer les " et compagnie et remettre des guillemets et des accents classiques.

Pour l'encodage utf8, j'aurais tendance à dire que si tes données sont en iso, il vaut mieux les exploiter tel quels, mais tu peux aussi utiliser ut8_encode / ut8_decode pur en changer le format.

Re: caractères spéciaux

Posté : 02 août 2012, 01:07
par chessmancaryl
Un p'tit coup d'oeil à la doc de ces fonctions t'aurait tout de suite donné la réponse : html_entity_decode ;)

Ca c'est pour virer les " et compagnie et remettre des guillemets et des accents classiques.

Pour l'encodage utf8, j'aurais tendance à dire que si tes données sont en iso, il vaut mieux les exploiter tel quels, mais tu peux aussi utiliser ut8_encode / ut8_decode pur en changer le format.
Merci bcp Ryle pr vos réponses.
MAis je ne comprends plus rien.
J'ai utilisé html_entity_decode. Maintenant j'ai des ? au lieu des accentués. :(
Voilà mon bout de code php:

<?php
// ?dition du d?but du fichier XML
$host="localhost";
$base="test";
$user="root";
$pwd="";
@mysql_connect($host,$user,$pwd) or die("Connexion impossible");
@mysql_select_db($base) or die("Echec de selection de la base");
mysql_query('set names utf8');
$xml = '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0">';

$xml .= '<channel>';
$xml .= '<title>Orange Tunisie</title>';
$xml .= '<link>http://www.orange.tn</link>';
$xml .= '<description><![CDATA[(A la Une de l\'actualit骝]></description>';

// selection des news

$res=mysql_query("SELECT * FROM items WHERE NOT(link ='')AND items.category_id=3 ORDER BY items.created DESC LIMIT 0,5");
while ($tab = mysql_fetch_array($res)) {
$title=($tab['title']);
echo($title);
$link=$tab['link'];
$description=($tab['content']);

echo($description);
$pubDate=$tab['start_publishing'];
$date2=date("D, d M Y H:i:s", strtotime($pubDate));
$enclosure=$tab['enclosure'];

$xml .= '<item>';
$xml .= '<title>'.$title.'</title>';

$xml .= '<description><![CDATA['.$description.']]></description>';

$xml .= '<link><![CDATA['.$link.']]></link>';
$xml .= '<pubDate><![CDATA['.$date2.' ]]>GMT</pubDate>';


$xml .= '</item>';
}
$xml .= '</channel>';
$xml .= '</rss>';
//str_replace ( "&agrave", "?", $xml) ;
//utf8_decode

// ?criture dans le fichier
$fp = fopen("people.xml", 'w+');
fputs($fp, (html_entity_decode ($xml)));
fclose($fp);
@mysql_close();

?>
Essayez de voir le résultat avec moi:
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Orange Tunisie</title><link>http://www.orange.tn</link><description><![CDATA[(A la Une de l'actualit�)]]></description><item><title>Collision entre un camion et deux trains</title><description><![CDATA[<p>TUNIS, 31 juil 2009 (TAP) - Une collision entre un train de voyageurs en provenance de Tunis se dirigeant vers Sousse et un camion a eu lieu, vendredi, au passage � niveau de Fondouk Jedid (Gouvernorat de Ben Arous).</p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>6e édition des dimanches sans voiture</title><description><![CDATA[<p>TUNIS, 1er ao�t 2009 (TAP) - La ville de Tunis organise la sixi�me �dition des Dimanches sans voiture. La manifestation est pr�vue les 2, 9 et 16 ao�t � l&rsquo;avenue Habib Bourguiba et ce de 20h00 � 23h00. Ces soir�es seront anim�es par des spectacles de musique et de danse. </p> ]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>Monastir : 9ème session du festival du Cherkaw</title><description><![CDATA[ <p>L'organisation d'une grande table de d�gustation du "Cherkaw" a marqu� l'ouverture de la 9�me session du festival du Cherkaw qui se poursuit jusqu'au 9 ao�t courant.</p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>Le Kef: Fête du Bourzguène à l'approche des moissons </title><description><![CDATA[ <p>LE KEF, 12 mai 2010 (TAP) - L'Association de sauvegarde de la M�dina du Kef c�l�bre, du 13 au 16 mai 2010, la traditionnelle f�te du Bourzgu�ne: un festival qui marque la fin du printemps et l'imminence de la saison des moissons. </p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title>Caravane de solidarité sanitaire de l'Association "Basma", à Sidi Bouzid </title><description><![CDATA[ <p>SIDI BOUZID, 12 mai 2010 (TAP) - L'Association "Basma" pour la promotion de l'emploi des handicap�s, que pr�side Mme Le�la Ben Ali, �pouse du pr�sident de la R�publique, a organis�, mercredi, une caravane de solidarit� sanitaire dans le Gouvernorat de Sidi Bouzid, dont les prestations ont b�n�fici� � plus de 1000 familles r�sidant dans les zones recul�es des d�l�gations de Jelma, de Sidi Ali Bou Aoun, de Meknassi et de Menzel Bouza�ene. </p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item></channel></rss>

Re: caractères spéciaux

Posté : 02 août 2012, 10:51
par Ryle
Attention il ne faut pas l'appel à la fonction sur le code xml que tu as généré. Il faut faire appel uniquement sur le contenu de celui-ci :

$title = html_entity_decode($tab['title']);
$description = html_entity_decode($tab['content']);

Cependant, vu que tu génères un flux rss, tu peux tout à fait garder les entités html. L'agrégateur qui lira ton flux devrait normalement savoir les interpréter (le problème est peut être là d'ailleurs ?)

Il faudrait donc plutôt regarder du côté de utf8_decode() pour résoudre le problème d'accents :)

Re: caractères spéciaux

Posté : 02 août 2012, 11:44
par chessmancaryl
Attention il ne faut pas l'appel à la fonction sur le code xml que tu as généré. Il faut faire appel uniquement sur le contenu de celui-ci :

$title = html_entity_decode($tab['title']);
$description = html_entity_decode($tab['content']);

Cependant, vu que tu génères un flux rss, tu peux tout à fait garder les entités html. L'agrégateur qui lira ton flux devrait normalement savoir les interpréter (le problème est peut être là d'ailleurs ?)

Il faudrait donc plutôt regarder du côté de utf8_decode() pour résoudre le problème d'accents :)

Merci bcp ryle, vs m'avez sauvé.
J'ai arrangé le problème des descriptions et elles s'affichent correctement.:)
Le problème réside dans le title. Probablement, les titles sont dans ma base en iso et s'affichent 6e édition.
Même avec mysql_query('set names utf8') rien ne change.
:(

Voilà ce que j'ai obtenu:
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Orange Tunisie</title><link>http://www.orange.tn</link><description><![CDATA[(A la Une de l'actualité)]]></description><item><title><![CDATA[Collision entre un camion et deux trains]]></title><description><![CDATA[<p>TUNIS, 31 juil 2009 (TAP) - Une collision entre un train de voyageurs en provenance de Tunis se dirigeant vers Sousse et un camion a eu lieu, vendredi, au passage à niveau de Fondouk Jedid (Gouvernorat de Ben Arous).</p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title><![CDATA[6e édition des dimanches sans voiture]]></title><description><![CDATA[<p>TUNIS, 1er août 2009 (TAP) - La ville de Tunis organise la sixième édition des Dimanches sans voiture. La manifestation est prévue les 2, 9 et 16 août à l&rsquo;avenue Habib Bourguiba et ce de 20h00 à 23h00. Ces soirées seront animées par des spectacles de musique et de danse. </p> ]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title><![CDATA[Monastir : 9ème session du festival du Cherkaw]]></title><description><![CDATA[ <p>L'organisation d'une grande table de dégustation du "Cherkaw" a marqué l'ouverture de la 9ème session du festival du Cherkaw qui se poursuit jusqu'au 9 août courant.</p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title><![CDATA[Le Kef: Fête du Bourzguène à l'approche des moissons ]]></title><description><![CDATA[ <p>LE KEF, 12 mai 2010 (TAP) - L'Association de sauvegarde de la Médina du Kef célèbre, du 13 au 16 mai 2010, la traditionnelle fête du Bourzguène: un festival qui marque la fin du printemps et l'imminence de la saison des moissons. </p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item><item><title><![CDATA[Caravane de solidarité sanitaire de l'Association "Basma", à Sidi Bouzid ]]></title><description><![CDATA[ <p>SIDI BOUZID, 12 mai 2010 (TAP) - L'Association "Basma" pour la promotion de l'emploi des handicapés, que préside Mme Leïla Ben Ali, épouse du président de la République, a organisé, mercredi, une caravane de solidarité sanitaire dans le Gouvernorat de Sidi Bouzid, dont les prestations ont bénéficié à plus de 1000 familles résidant dans les zones reculées des délégations de Jelma, de Sidi Ali Bou Aoun, de Meknassi et de Menzel Bouzaïene. </p>]]></description><link><![CDATA[http://www.tap.info.tn/fr/index.php?opt ... d=99999999]]></link><pubDate><![CDATA[Thu, 01 Jan 1970 00:00:00 ]]>GMT</pubDate></item></channel></rss>



Je vous rappelle que j'ai besoin de ce flux pour mon application Android qui accepte l'encodage utf8.