Page 1 sur 1

encodage et caractères spéciaux

Posté : 01 avr. 2007, 08:58
par mat10000
Bonjour à tous,

Je scan une arborescence et l'écris dans un fichier xml.
Mon fichier xml commence ainsi

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-1"?>
et pour l'écrire je fais un simple
fwrite($xmlFile,$strXML);
Le caractère ç ne passe pas et est remplacé par un carré, j'ai essayé de remplacer ISO-8859-1 par UTF-8 et le ç passe mais pas le è.
J'ai donc essayé en ajoutant
fwrite($xmlFile,utf8_encode($strXML));
mais ça ne fonctionne pas non plus

Avez vous une idée sur la bonne méthode à utiliser?
Merci à tous et bon dimanche

Posté : 02 avr. 2007, 10:13
par tanky
Normalement si tu fait un utf8_encode sur ta chaine et que ton fichiers XML est en UTF-8, ca devrait marcher ...

Voici un exemple de génération de fichier XML au format UTF-8 (script PHP est écrit au format ANSI via éditeur)
<?php

	header("Content-Type: text/xml");

	$nom = "Dupond";
	$prenom = "Hervé";
	$commentaire = "ça se passe comme ça chez mcdonald ...";
	
	print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
	print "<personne>\n";
	print "<nom>".utf8_encode($nom)."</nom>\n";
	print "<prenom>".utf8_encode($prenom)."</prenom>\n";
	print "<commentaire>".utf8_encode($commentaire)."</commentaire>\n";
	print "</personne>";

?>

Posté : 03 avr. 2007, 08:58
par Invité
bonjour et merci pour ta réponse. Je ne comprends pas bien une chose, ton script fonctionne parfaitement par contre dès que je souhaite l'écrire dans un fichier ça ne fonctionne plus, as tu une idée sur la cause du problème?

Posté : 03 avr. 2007, 11:45
par mat10000
petite info supplémentaire qui pourrait aider.
Quand je fais tourner le script sur surveur local sur PC ça fonctionne bien je récupère le ç et le è

Dès que je e met en ligne sur serveur free ça ne marche plus. Je vais essayer sur un autre serveur.

Oui en effet ça fonctionne sur un autre serveur Linux !!
C'est érgane

Posté : 03 avr. 2007, 16:01
par tanky
J'ai testé en local (windows, easyphp2.0) et sur FREE. Dans les deux cas le fichier est correct. Voici le code utilisé:
<?php

	$nom = "Dupond";
	$prenom = "Hervé";
	$commentaire = "ça se passe comme ça chez mcdonald";
	
	$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
	$xml .= "<personne>\n";
	$xml .= "<nom>".utf8_encode($nom)."</nom>\n";
	$xml .= "<prenom>".utf8_encode($prenom)."</prenom>\n";
	$xml .= "<commentaire>".utf8_encode($commentaire)."</commentaire>\n";
	$xml .= "</personne>";
	
	$fichier = fopen("myxmlfile.xml","w");
	fwrite($fichier,$xml);
	fclose($fichier);

?>

Posté : 03 avr. 2007, 16:26
par mat10000
ok pareil pour moi donc je ne comprends vraiment rien du tout la.
Est ce possible que les noms que je récupère sont issus de répertoires et fichiers ?

j'ai un è qui est écrit comme cela dans mon xml è

Posté : 03 avr. 2007, 16:38
par tanky
Il est possible que le texte que tu tente d'insérer dans le XML soit déjà en l'UTF-8, dans quel cas l'appel utf8_encode() est de trop ...

Un petit test: fait juste un die() de ta chaine, lance ta page et voit l'encodage (sous firefox: affichage > encodage des caractères)

Posté : 03 avr. 2007, 17:36
par mat10000
il m'annonce Occidental ISO-8859-1

Posté : 03 avr. 2007, 18:24
par tanky
il faut donc bien faire appel à la fonction utf8_encode() sur chaque valeur.

Envoi l'ensemble du code pour voir ce qui poserait problème...

Posté : 03 avr. 2007, 21:05
par mat10000
ok voici le code
<?php 

$strXML="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$strXML.="<Gallerie>\n";
$from="images";

if ($dossier = opendir($from)) {
	$tabDir = array();
    while($value = readdir($dossier)) {
		if (is_dir($from."/".$value) && !in_array($value, array(".",".."))) {
			$tabDir[] = $value;
		}		 
	}
	sort($tabDir);	
	
	foreach($tabDir as $value) {
		$strXML.="<imageNode imgURL=\"".$from."/".$value."\"></imageNode>\n";
	}	
}
closedir($dossier);

$strXML.="</Gallerie>";
$xmlFile = fopen("xml/gallery.xml","w"); 
fwrite($xmlFile,utf8_encode($strXML));
fclose($xmlFile);
?>
et au passage merci pour tes réponses c'est sympa
Bonne soirée

Posté : 04 avr. 2007, 10:37
par tanky
Je viens de tester ton script, les carractères "é", "ç", "î" passent bien ... aussi bien en local que sur FREE ...

Posté : 04 avr. 2007, 11:24
par mat10000
bon alors la !!!!
je reprend tout et je test.

merci