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
Fichier parser.php
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)
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)