Bonjour, je voudrais créer un fichier avec php, pour cela j'utilise les fonction fopen et fwrite, ce fichier tex servira ensuite à générer un pdf téléchargeable, mais je travail en utf8, le fichier tex doit donc être générer en utf8, or php ne semble pas être capable de générer un fichier dans un autre encodage que l'iso 8859-1.
évidement php étant utiliser ailleur qu'en france on doir pouvoir spécifier le code utiliser pour la création du fichier mais où?

MErci pour votre aide
Modifié par yobuntu (23 Oct 2006 - 15:08)
Administrateur
Bonjour,

en commençant à lire la doc sur mbstring, je dirais que la solution s'y trouve, m'enfin je suis pas spécialiste de PHP donc je me trompe peut-être Smiley confused


EDIT: pour une utilisation ponctuelle d'UTF-8 avec des chaînes, il y a utf8_encode()
Modifié par Felipe (20 Oct 2006 - 11:29)
merci de m'avoir répondu

Je vais préciser un peu plus ma question:

Les chaines de caractères que j'utilise proviennent de 2 sources:

- des fichier .tex, encodés en utf8
- une base de donnée encodée aussi en utf8.

Le probleme est que: quand j'ouvre le fichier avec un éditeur de texte (gedit), l'éditeur me dit que le fichier est en iso 8859-1 et m'affiche tout les caractères utf8 de facon bizarre (comme des caractères utf8 lu comme s'il etait de l'iso 8859-1).

la fonction utf8_encode (avec laquelle j'ai eu pas mal de problèmes car je réencodais en utf8 des caractères déja en utf8 ne m'est d'aucun secour)
par contre dans mes recherches, j'étais tombé sur mbstring mais je n'ai pas vraiment compris ce que fesais cette fonction ni comment elle s'utilise.
Modérateur
Salut yobuntu Smiley cligne ,

Il me semble qu'il faut juste rajouter quelque chose comme
header('Content-type: text/plain; charset=utf-8');
avant l'écriture.

@+


[*Plouf Plouf]
En fait le header ne change rien Smiley rolleyes

En effectuant le test suivant :
<?php
$content = 'almk paoiyuç_à"a(ékjsd:;vnç_yg';
$id = fopen("test1.txt","w+");
fwrite($id,utf8_encode($content));
fclose($id);
?>
le fichier généré est bien en UTF-8.

Donc à priori si le fichier généré n'est pas en UTF-8 cela vient de caractères incorrects dans le $content

Et peut-être une piste : le test suivant
<?php
$fp=fopen("test1.txt","r");
while(!feof($fp))
{
$content=fread($fp, 100); 
}
fclose($fp);
$id = fopen("test2.txt","w+");
fwrite($id,$content);
fclose($id);
?> 
ne génère pas de l'UTF-8 Smiley eek

[/Plouf Plouf]
Modifié par Heyoan (20 Oct 2006 - 19:41)
Normalement, dès le moment où ton fichier .php, ta base et tes autres fichiers .txt sont tous en utf8, le fichier devrait s'enregistrer de lui-même aussi en utf8. PHp lit et enregistre les fichiers directement en binaire, donc il prend tel quel ce qu'on lui donne...
en fait vous êtes en train de me dire que l'encodage du fichier dépandra des premier caractères encodées dans le fichier?

car pour le moment php crer un fichier iso 8859-1 dans lequel j'ai plein de caractère utf8 (qui affichent donc 2 caractères vu que le fichier est en iso 8859).

je vais donc faire plus attention au tout premier caractère que j'enregistre dans le fichier, je vous tiendrait au courant de mes experiences.

Merci a vous
yobuntu a écrit :
car pour le moment php crer un fichier iso 8859-1 dans lequel j'ai plein de caractère utf8 (qui affichent donc 2 caractères vu que le fichier est en iso 8859).

PHP ne fait rien du tout, il se contente de tout faire en binaire, quelque soit l'encoding. Il faut à chaque fois préciser l'encoding dans plein de fonction (genre htmlspecialchars entre autres)

yobuntu a écrit :
je vais donc faire plus attention au tout premier caractère que j'enregistre dans le fichier

Ca n'a rien à voir avec les premiers caractères. Ou peut-être pour les logiciels faisant de l'auto-détection (mais jamais top)
ok je crois que je comprend mon problème:

il n'y a pas de problème!
mon fichier était bien encodé
mais mon éditeur de texte: gedit, le détectait comme de l'iso alors qu'il était effectivement en utf8, donc les caractères s'affichait mal car il étaient en utf8 lu comme de l'iso.

donc le dernier mystère qui reste est: pourquoi gedit ne détecte pas correctement l'encodage des fichier générer par php?

mais je ne pense que ça concerne plutôt un autre forum.

merci a de m'avoir aidé a comprendre.
Modifié par yobuntu (23 Oct 2006 - 15:09)
yobuntu a écrit :
pourquoi gedit ne détecte pas correctement l'encodage des fichier générer par php?

Laisse tomber l'auto-détection, ça foire à chaque fois Smiley ohwell Sous jEdit c'est pareil...
miracle!!

bluefish editor detect le truc correctement => confirmation absolue que le pb vennait de gedit => adieu gedit, bonjour bluefish.

(je vous rassure je change pas d'éditeur juste pour ça mais bluefish a pas mal d'autre avantages)