11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Je suis en train de coder une sorte d'agrégateur de flux RSS qui récupère et met à jour le contenu d'un <div> avec la technologie Ajax. J'utilise un parseur qui traduit le contenu d'un fichier XML en ligne de texte.
Mon problème et le suivant : je suis obligé d'appliquer htmlentities et htmlspecialchars à mon contenu sinon la fonction replacedata d'AJAX se retrouve avec des retours à la ligne présent dans le code même de ma page et cela ne fonctionne pas.

C'est bien joli mais je voudrais pouvoir appliquer une mise en forme à mon texte.
Pour être plus explicite je vous fourni le code de mes fichiers.

Fichier test.php
<html>
<head>
<script>
function submitForm()
{ 
    var xhr; 
    try {  xhr = new ActiveXObject('Msxml2.XMLHTTP');   }
    catch (e) 
    {
        try {   xhr = new ActiveXObject('Microsoft.XMLHTTP');    }
        catch (e2) 
        {
          try {  xhr = new XMLHttpRequest();     }
          catch (e3) {  xhr = false;   }
        }
     }
 
    xhr.onreadystatechange  = function()
    { 
		longueurCible = document.getElementById("dyn").firstChild.length;
		document.getElementById("dyn").firstChild.replaceData(0,longueurCible,"<?php include('parser.php'); ?>");
	}; 

   xhr.open( "POST", location.href,  true); 
   xhr.send(null); 
} 
</script>
</head>
                 
<body>
    <FORM method="POST" name="ajax" action="">                  
         <INPUT type="BUTTON" value="Submit"  ONCLICK="submitForm()">
    </FORM>
<div id="dyn">test</div>
 </body>
 </html> 


Fichier parser.php
<?php
	$parse="";
    $fichier = "http://www.clubic.com/xml/newslogiciel.xml";

    // Ma propre fonction de traitement du texte
    // qui est appelée par le "parseur"
    function fonctionTexte($parseur, $texte)
    {
        // Dans l'immédiat nous nous contentons d'afficher
        // le texte brut accompagné d'un simple retour à la ligne
        global $parse;
		$parse = $parse.$texte;
    }

    // Création du parseur XML
    $parseurXML = xml_parser_create();

    // Je précise le nom de la fonction a appeler
    // lorsque du texte est rencontré
    xml_set_character_data_handler($parseurXML, "fonctionTexte");

    // Ouverture du fichier
    $fp = fopen($fichier, "r");
    if (!$fp) die("Impossible d'ouvrir le fichier XML");

    // Lecture ligne par ligne
    while ( $ligneXML = fgets($fp, 1024)) {
        // Analyse de la ligne
        // REM: feof($fp) retourne TRUE s'il s'agit de la dernière
        //      ligne du fichier.
        xml_parse($parseurXML, $ligneXML, feof($fp)) or
            die("Erreur XML");
    }
    
    xml_parser_free($parseurXML);
	
	//Traitement du résultat
	$parse = preg_replace("/(\r\n|\n|\r)/", " ", $parse);
	$parse = htmlspecialchars($parse);
	echo $parse;
?>


Si je retire la partie "traitement du résultat" et que je me contente d'afficher la variable $parse, celle-ci contient tout un tas de retour à la ligne et je ne peux rien en faire.

La fonction replacedata accepte une chaine en troisième paramètre, donc, comment faire pour qu'un texte avec des retours à la ligne et des caractères spéciaux soit pris en compte ?
Modifié par TechnoGreg (06 Mar 2009 - 12:44)