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

sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 10 oct. 2008 à 14:16 - Dernière réponse : jadu 219 Messages postés mercredi 26 juillet 2006Date d'inscription 1 novembre 2016 Dernière intervention
- 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
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Ordinastie 93 Messages postés samedi 29 janvier 2005Date d'inscription 17 octobre 2008 Dernière intervention - 11 oct. 2008 à 03:53
3
Merci
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.

Merci Ordinastie 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de Ordinastie
Meilleure réponse
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 16 oct. 2008 à 13:44
3
Merci
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

Merci sagat06 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 124 internautes ce mois-ci

Commenter la réponse de sagat06
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 10 oct. 2008 à 15:07
0
Merci
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
Commenter la réponse de sagat06
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 14 oct. 2008 à 11:11
0
Merci
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
Commenter la réponse de sagat06
jadu 219 Messages postés mercredi 26 juillet 2006Date d'inscription 1 novembre 2016 Dernière intervention - 16 oct. 2008 à 11:20
0
Merci
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>
Commenter la réponse de jadu
sagat06 166 Messages postés mercredi 27 juin 2007Date d'inscription 31 mars 2014 Dernière intervention - 16 oct. 2008 à 14:01
0
Merci
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
Commenter la réponse de sagat06
jadu 219 Messages postés mercredi 26 juillet 2006Date d'inscription 1 novembre 2016 Dernière intervention - 16 oct. 2008 à 15:33
0
Merci
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>
Commenter la réponse de jadu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.