bonsoir...
je code actuellement un livre d'or xml/php, j'm'en sors relativement bien, sauf qu'en fait, j'ai un énorme problème d'encodage...
tout mes fichiers sont en ISO-8859-1, et tout marche parfaitement, sauf pour les accents.
on m'a conseillé d'utiliser une htmlentities pour coder mes entités, l'ennui, c'est que mon parser xml n'interprête pas les entités du style "ë", mais bien celles en "×"...
voici le livre d'or, avec un bouton pour remettre le xml à zéro quand ça foire, tant que j'ai pas trouvé la solution.
les codes:
1. la partie qui affiche les messages tirés du xml:
2. la partie qui traite les données du formulaire:
3. mon xsl:
Je ne mets pas le code de mon xml, car il est totalement correct et ne change rien.
Donc voilà, merci bcp, le problème vient d'htmlentities à coup sûr, ou de mon parser, mais quand on rentre le message sans utiliser d'accent ou caractères "entitables", le livre d'or marche.
Merci.
Modifié par Lisarael (20 Apr 2005 - 23:07)
je code actuellement un livre d'or xml/php, j'm'en sors relativement bien, sauf qu'en fait, j'ai un énorme problème d'encodage...
tout mes fichiers sont en ISO-8859-1, et tout marche parfaitement, sauf pour les accents.
on m'a conseillé d'utiliser une htmlentities pour coder mes entités, l'ennui, c'est que mon parser xml n'interprête pas les entités du style "ë", mais bien celles en "×"...
voici le livre d'or, avec un bouton pour remettre le xml à zéro quand ça foire, tant que j'ai pas trouvé la solution.
les codes:
1. la partie qui affiche les messages tirés du xml:
<?php
// processeur xsl/xml
$filename = $path ."xml/styles.xsl";
$xmldoc = domxml_open_file($path ."xml/messages.xml");
$xsldoc = domxml_xslt_stylesheet_file($filename);
$result = $xsldoc->process($xmldoc);
print $xsldoc->result_dump_mem($result);
?>
2. la partie qui traite les données du formulaire:
<?php
if(empty($_POST['pseudo']) || empty($_POST['comment'])) {
echo "<h2>ATTENTION !</h2>";
echo "<p>Vous n'avez pas rempli tous les champs obligatoires pour poster votre message.<br />Veuillez <a href=\"javascript:history.back()\">réessayer</a>.</p>";
}
else {
traitement();
echo "<p>Votre message a bien été ajouté. Merci beaucoup.</p>";
echo "<p><a href=\"book.php\">Voir votre message</a>.</p>";
}
function traitement() {
// création de l'heure et de la date du post, et stockage dans deux variables.
setlocale( LC_TIME, "fr_FR", "FRA");
$date = strftime("%A %d %B %Y");
$heure = "".strftime("%H")."h".strftime("%M")."";
// récupération des variables passées au formulaire
$pseudo = htmlentities($_POST['pseudo']);
$message = htmlentities($_POST['comment']);
if(empty($_POST['site'])) {
$siteExist = false;
}
else {
$siteExist = true;
$site = htmlentities($_POST['site']);
}
// inclusion du script de calcul du path
include("scripts/path.php");
// création des balises xml du nouveau message.
$xmldoc = domxml_open_file($path ."xml/messages.xml");
$guestbookTag = $xmldoc->get_elements_by_tagname("guestbook");
// balise message
$messageTag = $xmldoc->create_element("message");
$messageTag->set_attribute("date", $date);
$messageTag->set_attribute("heure", $heure);
// balise pseudo
$pseudoTag = $xmldoc->create_element("pseudo");
if ($siteExist == true) {
$pseudoTag->set_attribute("site", $site);
}
$pseudoTag->set_content($pseudo);
// ajout de la balise pseudo dans la balise message
$messageTag->append_child($pseudoTag);
// balise comment
$commentTag = $xmldoc->create_element("comment");
$commentTag->set_content($message);
// ajout de la balise comment dans la balise message
$messageTag->append_child($commentTag);
$guestbookTag[0]->append_child($messageTag);
$xmldoc->insert_before ($messageTag, $guestbookTag[0]->first_child());
$xmlRoot = $xmldoc->dump_mem();
//sauvegarde du fichier xml
$xmlFile = fopen($pathNoFile ."xml/messages.xml", "w");
fwrite($xmlFile, $xmlRoot);
fclose($xmlFile);
}
?>
3. mon xsl:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="ISO-8859-1" />
<xsl:template match="//message">
<p class="message">
<xsl:value-of select="./comment" /><br /><br />
<small>
par
<strong>
<xsl:value-of select="./pseudo" />
</strong>
<xsl:if test="./pseudo/@site">
(<a href="{./pseudo/@site}">site</a>)
</xsl:if>,
le <xsl:value-of select="@date" /> à <xsl:value-of select="@heure" />.
</small>
</p>
</xsl:template>
<xsl:template match="/guestbook">
<xsl:if test="not(//message)">
<p>Il n'y a pas encore de message dans ce livre d'or.</p>
<p>Utilisez le formulaire en bas de page pour en ajouter un.</p>
</xsl:if>
<xsl:apply-templates />
</xsl:template>
</xsl:stylesheet>
Je ne mets pas le code de mon xml, car il est totalement correct et ne change rien.
Donc voilà, merci bcp, le problème vient d'htmlentities à coup sûr, ou de mon parser, mais quand on rentre le message sans utiliser d'accent ou caractères "entitables", le livre d'or marche.
Merci.
Modifié par Lisarael (20 Apr 2005 - 23:07)