RSS ... XML et caractères spéciaux

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : RSS ... XML et caractères spéciaux

par Aureusms » 19 mars 2009, 23:03

J'ai trouvé cela qui pourrait interesser http://fr.php.net/manual/fr/function.co ... encode.php
Tes caractères sont en HEXA il faut les convertir mais je ne sais pas comment à part faire su str_repalce à grande échelle.
J'ai trouvé une table de conversion ici : http://geraldetsonblog.free.fr/index.ph ... speciaux-2

RSS ... XML et caractères spéciaux

par stefane321 » 18 mars 2009, 21:24

Bonjour,

sa fait 4 jour que je cherche et que j'essais plein de chose mais jai des caractères spéciaux récalcitrant... et se ne sont pas tous les caractères spéciaux.

Pour un client je lui ai fait un module de news les données sont contenue dans une table dont l'interclassement est : latin1_swedish_ci

il insère ses données via un formulaire qui a un outil wysiwyg en y collant sont texte qu'il a préalablement composé dans Openoffice se qui fait que pour chaque new dans la bd sa donne un code html ayant une entete utf-8

Quand les données sont affichés dans le site tous va bien.

Mon problème est dans le flux rss de ces news certains caractères bug complètement... je vous colle la page du site et la page de rss
http://www.etaupolicier.com/index-tmp.php

http://www.etaupolicier.com/news_FR_flux.xml

les textes qui bug sont les extrait du livre que le client a composé ... quand il a tapé sont livre pour certains caractères il a utilisé la table des caractères de windows.

Voici les caractère qui bug:
’ … –
J'ai essayé de faire un remplacement de caractère avec str_replace() mais ont dirait que la fonction ne voit pas ces caractères , il ne les remplacent pas.

Dans la création du rss j'encode en utf-8 avec utf8_encode() .... j'ai l'impression de ne pas avoir le choix car sinon j'ai plein de message d'erreur me disant que mes données ne sont pas en utf-8.

J'ai cru que peut-être le html de l'outil wysiwyg posait problème alors jai tout fait enlever les tag html avec strip_tags() ... résultat= aucun progrès.

Pouvez-vous m'aider svp , je suis a bout de piste de solution

jai demandé au client de changer ses caractères a problèmes mais il ne veut pas ... car trop long cest 3 livre de 500 pages chaques.

Au cas où sa vous aiderais à m'aider, voici le code de mon fichier qui génère mon rss en xml:
<?php

function &init_news_rss(&$xml_file)
{
        $root = $xml_file->create_element("rss"); //création de l'element
        $root->set_attribute("version", "2.0"); //on lui ajoute un attribut
		//$root->set_attribute("encoding","utf8"); //on lui ajoute un attribut

        $root = $xml_file->append_child($root); //on l'insère dans le noeud parent (ici root qui est "rss")
       
        $channel = $xml_file->create_element("channel");
        $channel = $root->append_child($channel);
               
        $desc = $xml_file->create_element("description");
        $desc = $channel->append_child($desc);
        $text_desc = $xml_file->create_text_node("Les actualités de L'Étau Policier."); //on insère du texte entre les balies <description></description>
        $text_desc = $desc->append_child($text_desc);
       
        $link = $xml_file->create_element("link");
        $link = $channel->append_child($link);
        $text_link = $xml_file->create_text_node("http://www.etaupolicier.com");
        $text_link = $link->append_child($text_link);
       
        $title = $xml_file->create_element("title");
        $title = $channel->append_child($title);
        $text_title = $xml_file->create_text_node("etaupolicier.com");
        $text_title = $title->append_child($text_title);
       
        return $channel;
}
 
function add_news_node(&$parent, $root, $id, $mois, $annee, $titre, $contenu, $date)
{
        $item = $parent->create_element("item");
        $item = $root->append_child($item);
       
        $title = $parent->create_element("title");
        $title = $item->append_child($title);
        $text_title = $parent->create_text_node($titre);
        $text_title = $title->append_child($text_title);
       
        $link = $parent->create_element("link");
        $link = $item->append_child($link);
        $text_link = 
			$parent->create_text_node("http://www.etaupolicier.com/actualites_archives.php?mois=".$mois."&annee=".$annee."#".$id."");
        $text_link = $link->append_child($text_link);
       
        $desc = $parent->create_element("description");
        $desc = $item->append_child($desc);
        $text_desc = $parent->create_text_node($contenu);
        $text_desc = $desc->append_child($text_desc);
       
        $com = $parent->create_element("comments");
        $com = $item->append_child($com);
        $text_com = $parent->create_text_node("http://www.etaupolicier.com/actualites_archives.php?mois=".$mois."&annee=".$annee."#".$id."");
        $text_com = $com->append_child($text_com);
       
     
        $pubdate = $parent->create_element("pubDate");
        $pubdate = $item->append_child($pubdate);
        $text_date = $parent->create_text_node($date);
        $text_date = $pubdate->append_child($text_date);
       
        $guid = $parent->create_element("guid");
        $guid = $item->append_child($guid);
        $text_guid = $parent->create_text_node("http://www.etaupolicier.com/actualites_archives.php?mois=".$mois."&annee=".$annee."#".$id."");
        $text_guid = $guid->append_child($text_guid);
       
        $src = $parent->create_element("source");
        $src = $item->append_child($src);
        $text_src = $parent->create_text_node("http://www.etaupolicier.com");
        $text_src = $src->append_child($text_src);
}
 
function rebuild_rss()
{
include("config.php");
        mysql_connect($host,$login,$password);
        mysql_select_db($db);
 
        //On récupère les news
        $nws=mysql_query('SELECT id, nom, description, DAYOFWEEK(date_arch) day_week, DAYOFMONTH(date_arch) day, YEAR(date_arch) an, MONTH(date_arch) mois FROM `actualites` where MONTH(date_arch)='.date("m").' and YEAR(date_arch)='.date("Y").' ORDER BY id DESC, an DESC, mois DESC, day DESC') or die(mysql_error());
 
        //On crée le fichier XML
        $xml_file = domxml_new_doc("1.0");
 
        //On initialise le fichier XML pour le flux RSS
        $channel = init_news_rss($xml_file);

        //On ajoute chaque news au fichier RSS
        while($news = mysql_fetch_assoc($nws))
        {
                add_news_node($xml_file, $channel, $news["id"], $news["mois"], $news["an"], utf8_encode(stripslashes($news["nom"])), strip_tags(utf8_encode(stripslashes($news["description"]))), $news["date_arch"]);
        }
       
        //On écrit le fichier
        $xml_file->dump_file("news_FR_flux.xml");
}

?>