sauvegarde en UTF-8

Eléphanteau du PHP | 25 Messages

22 juin 2010, 22:47

Bonjour,

J'ai un problème concernant un fichier .txt (codage UTF-8 à la base) que j'édite via un simple formulaire, seulement lorsque je valide mon texte il retourne au format ANSI.

Si j'ai besoin qu'il reste en UTF-8 c'est dans l'optique qu'une animation swf puisse lire les accents de ce texte dans un champs dynamique standard appelé à l'aide de this.texteur.loadVariables("texte.txt"); sous flash.
Donc y a t-il un code pour permettre à mon fichier de rester un UTF-8?

Voici mon code très simple car je débute en php pour éditer ce texte: (act.php)
<?php 
$ressource_fichier = fopen('texte.txt', 'w'); 
if($ressource_fichier AND is_writable('texte.txt'))
{ 

fputs($ressource_fichier, htmlentities($_POST['description']));; 
fclose($ressource_fichier); 
} 
?> 

Et si il y a besoin mon formulaire: (rec.php)
[
<?php 
$fichier = file_get_contents('texte.txt');
echo $fichier;
?> 

</div>
<form action="act.php" method="post"> 
<p align="center"><textarea name="description" rows="1" cols="200">textfield=</textarea></p> 
<p align="center"><input type="submit" value="Envoyer" /></p>
</form> 
Si quelqu'un pouvait m'aider ou m'indiquer la marche à suivre, j'en serais plus que ravi!!!

Merci par avance

ViPHP
ViPHP | 5462 Messages

22 juin 2010, 22:52

hello, t'as un petit tuto sur l'UTF-8 ici : faq-tutoriels/encodage-utf-t245062.html :wink:
y'a aussi la directive default_charset de php :wink:

Eléphanteau du PHP | 25 Messages

22 juin 2010, 23:45

Merci pour la rapidité de cette réponse donc j'ai effectué deux tentatives qui n'ont malheureusement pas fonctionné. Peut-être que l'une d'entre elles se rapproche de ma solution, c'est pour cela que je vais indiquer mes deux erreurs :( .

Premier essai
$ressource_fichier = fopen('texte.txt', 'w'); 
if($ressource_fichier AND is_writable('texte.txt')) 
{ 

$description=UTF8_encode($description);// Ma première tentative

fputs($ressource_fichier, htmlentities($_POST['description']));;
fclose($ressource_fichier); 
} 
Second essai
$ressource_fichier = fopen('texte.txt', 'w'); 

if($ressource_fichier AND is_writable('texte.txt'))
{ 

fputs($ressource_fichier, utf8_encode($_POST['description']));; //Ma seconde tentative
fclose($ressource_fichier); 
} 
Sur mes deux essaies, j'ai inséré la même ligne dans le head:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Dans le premier cas je n'ai aucun message d'erreur mais mon fichier s'enregistre toujours au format ANSI et non UTF-8.
Avec le second code, je me retourve avec des erreurs et rien ne fonctionne non plus.

Donc, dans quelle direction devrais-je continuer? Aucune ???

ViPHP
ViPHP | 5462 Messages

23 juin 2010, 00:00

t'as bien vérifié que l'encodage de ton fichier php et de ton fichier txt sois en UTF-8 ? si c'est bien fais t'as pas besion de utf8_encode et/ou utf8_decode

Eléphanteau du PHP | 25 Messages

23 juin 2010, 12:20

Alors oui le fichier .txt est bien enregistré à la base en codage UTF-8 et ai intégré la ligne ci-dessous dans mon code mais ça ne fonctionne toujours pas.

Ligne inséré
<?php 

header('Content-Type: text/html; charset=utf-8'); // ligne que j'ai inséré

$ressource_fichier = fopen('texte.txt', 'w'); 
if($ressource_fichier AND is_writable('texte.txt'))
{ 

fputs($ressource_fichier, htmlentities($_POST['description']));; 
fclose($ressource_fichier); 
} 
?> 
Là, je ne comprend vraiment pas, je n'arrete pas d'essayer diverses solutions mais rien n'y fait. :(

ViPHP
ViPHP | 5462 Messages

23 juin 2010, 13:12

utilise le 3eme paramètre de htmlentities

Eléphanteau du PHP | 25 Messages

23 juin 2010, 18:53

Il doit y avoir quelque chose que je ne saisi pas, là j'ai vraiment du mal.

J'ai donc fait ceci:
header('Content-Type: text/html; charset=utf-8');

$ressource_fichier = fopen('texte.txt', 'w'); 
if($ressource_fichier AND is_writable('texte.txt'))
{ 

fputs($ressource_fichier, utf8_encode($_POST['description']));; 
fclose($ressource_fichier); 
} 
Evidement ça ne fonctionne pas.

ViPHP
ViPHP | 5462 Messages

23 juin 2010, 19:19

ducoup ca s'affiche comment ? comme ca : é ou comme ca : � ?

Eléphanteau du PHP | 25 Messages

23 juin 2010, 20:29

Waou, quelle réactivité... je vois que c'est toi qui aide tout le monde sur ce forum =D>

Bien du coup les accents s'inscrivent de cette manière é.

J'ai avec cette version ce message d'erreur qui s'affiche lors de ma validation:
Warning: Cannot modify header information - headers already sent by (output started at /homez.342/test/www/act.php:8) in /homez.342/test/www/act.php on line 39

Ma ligne 39 étant:
header('Content-Type: text/html; charset=utf-8');
J'ai également ajouté (grace aux liens indiqué) ceci dans le htaccess du serveur:
AddDefaultCharset UTF-8

ViPHP
ViPHP | 5462 Messages

23 juin 2010, 20:37

comment est ton fichier act.php ?
Si la page affiche des caractères de ce type : "é", "î", "Ã", ...
=> Les données ont été enregistrées au format UTF-8, et le navigateur les affiche en pensant avoir affaire à de l'ISO.
verfie que ton fichier act.php sois encodé en utf-8 que les entete sois bonne aussi, sous firefox tu cliques droit dans page et tu fais "information sur la page" tu peu voir l'encodage

Eléphanteau du PHP | 25 Messages

23 juin 2010, 20:50

Alors l'ensemble de ma page act.php ci-dessous:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Send</title>
<style type="text/css">
</head>
<body>

<p>

  <?php 
header('Content-Type: text/html; charset=utf-8');

$ressource_fichier = fopen('texte.txt', 'w'); 

if($ressource_fichier AND is_writable('texte.txt'))
{ 

fputs($ressource_fichier, htmlentities($_POST['description']));;

fclose($ressource_fichier); 
} 
?> 

</p>
<p align="center" class="Style3">Texte à jour.</p>
<table width="574" border="0" align="center" cellpadding="0" cellspacing="1">
</table>
</body>
</html>
J'ai viré les infos css qui ne servent à rien ici ainsi que les infos de la table.
Si le navigateur pense avoir affaire à de l'ISO, c'est peut-être dû à l'index du site en lui même, je vais vérifier ça.

Sinon concernant l'information sur la page:

Type: text/html
Mode de rendu: Mode de respect des standards
Encodage: UTF-8
text/html; charset=utf-8

Eléphanteau du PHP | 25 Messages

23 juin 2010, 20:53

Bas finalement toute mes pages sont bien en charset=utf-8.

ViPHP
ViPHP | 5462 Messages

23 juin 2010, 21:03

au niveau de ton header c'est pas bon, il dois etre avant toute sortie


donc
<?php
header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
....

quand tu ouvre ton texte.txt firefox te dis que c'est du l'utf-8 aussi ?
pour que htmlentities sois en utf-8 c'est
htmlentities($str, ENT_COMPAT, 'UTF-8');
sinon il écrit en ISO

Eléphanteau du PHP | 25 Messages

23 juin 2010, 21:26

Donc j'ai fait ceci
<?php
header('Content-Type: text/html; charset=utf-8');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Send</title>
<style type="text/css">
</head>
<body>
<p>

  <?php 
htmlentities($fichier, ENT_QUOTES, 'UTF-8');

$ressource_fichier = fopen('texte.txt', 'w'); 

if($ressource_fichier AND is_writable('texte.txt'))
{ 

fputs($ressource_fichier, htmlentities($_POST['description']));;
fclose($ressource_fichier); 
} 
?> 

</p>
<p align="center" class="Style3">Texte à jour.</p>
<table width="574" border="0" align="center" cellpadding="0" cellspacing="1">
</table>
</body>
</html>
Et évidement j'ai encore dû faire nimporte quoi car ça ne fonctionne pas.

ViPHP
ViPHP | 5462 Messages

23 juin 2010, 21:33

t'as toujours pas changer ton htmlentities :wink:

c'est au moment du fputs qu'il faut le faire