Les caractères spéciaux (accentués,..) et la fonction fwrite()

Résolu
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 - 10 oct. 2008 à 14:16
jadu Messages postés 217 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 16 août 2018 - 16 oct. 2008 à 15:33
Bonjour à tous, j'ai un soucis avec la fonction fwrite().

En effet, pour un de mes projets, je dois récupérer  le contenu d'un textarea et l'enregistrer dans un fichier texte, afin de l'utiliser plus tard dans ma page html (je sais qu'il y a d'autres façons...)
J'envoie donc le contenu du textarea à mon script php via Ajax
Voilà mon script php:

<?php
header("Content-Type: text/plain;  charset=utf-8");
header("Cache-Control: no-cache, private");
header("Pragma: no-cache");

$c=$_REQUEST['text'];
$c2=htmlentities($c);
$fichier=fopen("mon_fichier.txt","a");
 fwrite($fichier,"$c2");
 fclose($fichier);

?>

Je le teste avec la chaîne de caractères suivante:
   pas drôle, méchant, ça va pas, à corriger, faîtes tourner...  (1)

Je m'attends à obtenir avec htmlentities() ceci:
   pas dr&ocirc;le, m&eacute;chant, &ccedil;a va pas, &agrave; corriger, fa&icirc;tes tourner  (2)

Mais à la place j'obtiens:
   pas dr&Atilde;&acute;le, m&Atilde;&copy;chant, &Atilde;&sect;a va pas, &Atilde;&nbsp; corriger, fa&Atilde;&reg;tes tourner  (3)  (je ne sais pas du tout pourquoi  !!)
ce qui, une fois utilisée dans mon projet, donne un affreux résultat sur ma page html.

Pour pallier cela, j'ai tenté de transmettre directement à mon script php le texte déjà converti (2) en supprimant donc du script $c2. Mais là, la fonction fwrite s'arrête au premier & rencontré, j'obtiens donc:
   pas dr     (et puis c'est tout ...)

Bref, je ne m'attendais pas du tout à ce soucis de dernière minute qui me bloque totalement pour le moment.
Si l'un d'entre vous pouvait m'orienter vers la bonne direction,
je vous en serais très reconnaissant.

Merci d'avance et à bientôt.

Signé Sagat

7 réponses

Ordinastie Messages postés 93 Date d'inscription samedi 29 janvier 2005 Statut Membre Dernière intervention 17 octobre 2008 2
11 oct. 2008 à 03:53
En fait, je pense que tu te trompes.
Ton "ô" est devenu "Ã'" et ton "é" est devenu "é". Un caractère qui en devient deux, c'est pathologique d'une conversion en UTF8 non gérée.

Les données de ton URL sont encodée en UTF8, donc si tu ne décode pas avant (utf8_decode()) l'écriture, tu n'auras pas ce que tu désires.

Ordinastie.
3
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
16 oct. 2008 à 13:44
Aucun pb jadu, je me mets souvent en mode 'fainéant' moi aussi .

Alors c'est simple:
lors de ton appel Ajax, tu marques cela:
=>
var parametres="text="+codeContenu('ton_id')+"&.....;

avec :
   function codeContenu(id){
       var contenu=document.getElementById(id).value;
       return encodeURIComponent(contenu);
}

et ton texte écrit dans l'input ou textarea:
   <textarea id='ton_id'>bla bla avec des accents</textarea>


Et là, tout fonctionne avec le même script php qu'au dessus, en enlevant $c2 qui n'est plus nécessaire (tu gardes $c tel quel).

Voilà, j'espère avoir résolu ton pb.

Signé Sagat
3
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
10 oct. 2008 à 15:07
Re,
j'ai finalement résolu mon problème tout seul .

Mon soucis venais de mon appel Ajax. En effet, je transmettais les paramètres à mon script ainsi:
ma fonction
{
var parametres="text="+contenu_du_textarea+"&type="+qqchose+"&....";
                 //  (en gros d'autres données en plus du texte convertit)
 requeteAJAX.open('POST','mon_script.php',true);
 requeteAJAX.onreadystatechange=prevenir;
 requeteAJAX.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
 
 requeteAJAX.send(parametres);
}

or le &
(lorsque je convertit préalablement le texte) corrompt en quelques sortes la var. parametres.
Je pense qu'en transmettant seulement le texte (donc une seule donnée dans parametres) et pas d'autres données en même temps, tout aurait fonctionné dès le début avec le texte accentué à convertir par le script et non avant.

Du temps perdu mais pas pour rien, erreur stupide à ne plus refaire...
Merci à tous ceux qui ont tenté de m'aider.

Signé Sagat
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
14 oct. 2008 à 11:11
Effectivement Ordinastie,
je pense que j'avais simplement résolu mon problême avec des rustines.
Vive le système D comme on dit.

Je vais me pencher d'un peu plus près vers ton idée.

Merci bien.

Signé Sagat
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jadu Messages postés 217 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 16 août 2018
16 oct. 2008 à 11:20
Tu voudras bien mettre ta solution finale ici,
car j'ai ce même problème (alors que je traite -mal sans doute en plus- autrement.)
c'est pour mettre des textes dans mon site perso, je travaille en php et css.

Donc, comme je suis paresseux de nature et par manie .. merci d'avance !

Prenez bien soin de vous.</sup>
0
sagat06 Messages postés 166 Date d'inscription mercredi 27 juin 2007 Statut Membre Dernière intervention 31 mars 2014 1
16 oct. 2008 à 14:01
J'allais oublier:
dans le script php tu dois rajouter $c2=utf8_decode($c);

avant de l'insérer dans ta base de données.

Si tu n'attends qu'une réponse de ton script pour l'utiliser dans ta page, il me semble que cela n'est pas nécessaire. 

Voilà, j'espère ne rien avoir oublier cette fois.

Signé Sagat
0
jadu Messages postés 217 Date d'inscription mercredi 26 juillet 2006 Statut Membre Dernière intervention 16 août 2018
16 oct. 2008 à 15:33
MERCI




ça marche !!!

Et si par hasard je peux un jour te rendre la pareille, ce sera avec joie !
Prenez bien soin de vous.</sup>
0
Rejoignez-nous