Php/ajax encodage partiel

Résolu
Brachior Messages postés 616 Statut Membre -  
 leFred -
Bonjour a tous,
mon probleme est assez énervant =/
et j'ai beau sillioner les forum ...
je n'ai toujours pas reussi a resoudre mon probleme :(

alors voila,
j'ai fait un miniChat (en ajax) sur mon site.
il fonctionne tres bien mis a part un point ...
  -> l'encodage >.>

je m'explique :
	pour contrer les eventuelles injections SQL j'utilise les fonctions suivantes:
		- mysql_real_escape_string()
		- htmlspecialchars()
	puis pour encoder les accents j'utilise :
		- htmlentities()
	
	a la sortie j'utilise :
		- html_entity_decode() avec comme argument 'ENT_NOQUOTES'
	
	les accents passent bien, et les \ qui protegent les quotes sont enlevés
	mais reste un probleme,
	certains caractères speciaux ne passent tout de meme pas =/
	( exemple : € , ™ , ... )
	
	je sais que le xml généré par ajax est en utf-8
	mais normalement le 'htmlentities' rectifie ce probleme
	( sauf pour € car le 'decode' passe en iso-8859-1
		alors que l'€ est dans l'iso-8859-15 )
	mais meme ™ ne passe pas car il lui donne un code ascii invalide >.>
	
	j'ai d'ailleurs aussi remarqué que si j'enlève le 'htmlentities'
	alors le ™ s'affiche mais plu les accents =S

si quelqu'un a une idée pour resoudre mon probleme ...
je lui en serais tres reconaissant ^^

PS : voici les bouts de mon code ^^
  en entrée :
	$message=
	mysql_real_escape_string(htmlspecialchars(htmlentities($_POST['message'])));
  en sortie :
	$message=
	strtolower(html_entity_decode($donnees['ChatMsg'],ENT_NOQUOTES));
  sachant que ma db est en latin1_general_ci
Configuration: Windows XP
Firefox 2.0.0.14

6 réponses

  1. poumon Messages postés 63 Date d'inscription   Statut Membre 11
     
    Salut

    Moi je mets ce header :

    <?php
    header('Content-Type: text/html; charset=ISO-8859-1');
    ?>


    au début de toutes mes pages .php qui seront appelées avec Ajax.
    8
  2. Brachior Messages postés 616 Statut Membre 46
     
    up !

    personne ? =S
    0
    1. Brachior Messages postés 616 Statut Membre 46
       
      re up!!
      toujours personne ? =/
      0
      1. Brachior Messages postés 616 Statut Membre 46 > Brachior Messages postés 616 Statut Membre
         
        re re up !! ( j'le remonte toutes les heures sait on jms xD lol ^^ )
        j'ai vraiment besoin d'un p'tit coupe d'pouces s'iou plait =S
        a vot' bon coeur m'sieu dame ... c'est pour l'artiste !! Oo
        0
      2. Brachior Messages postés 616 Statut Membre 46 > Brachior Messages postés 616 Statut Membre
         
        j'donne un exemple concret ( pour ceux qui tomberont par hasard ici Oo )
        voila les resultats ^^

        message a afficher :
        ' " / \ & é è à @ ™ (tm) € (euro)

        mysql_real_escape_string(htmlspecialchars(htmlentities($_POST['message'])))
        ' " / \ & é è à @ & #8482; (tm) ¤ (euro)

        ( j'ai mis un espace entre le & et #8482; car ccm.net le traduit en ™ lol ^^ )

        mysql_real_escape_string(htmlspecialchars($_POST['message']))
        ' " / \ & ? ? ? @ ™ (tm) ? (euro)
        0
      3. Brachior Messages postés 616 Statut Membre 46 > Brachior Messages postés 616 Statut Membre
         
        c'est l'h de l'up Oo lol

        bn dc tjs personne ? :snif: :'(
        0
      4. Brachior Messages postés 616 Statut Membre 46 > Brachior Messages postés 616 Statut Membre
         
        Oh Oh Oh ...

        on est jms mieux servie que part soit meme ^^

        j'post tt d'meme ma reponse pr ceux que ca interesse :)

        suffit de forcer la meta en mettant :

        header('Content-Type: text/html; charset=ISO-8859-15');


        avant chaque affichage ;)

        voila ^^ merci a moi
        de rien de rien ..
        si si j'insiste :)

        bn ok j'arrete lol ^^ bye all ^^
        0
  3. PhP Messages postés 1774 Statut Membre 606
     
    Bsr

    Hum j'ai eu le même problème : j'ai essayé ta solution mais rien à faire avec ISO-8859-15 ca ne fonctionne pas
    Avec ISO-8859-1 ça fonctionne sous FF mais pas sous IE

    Finalement j'ai supprimé le header de ma page appellée et dans la requête AJAX je passe directement
    this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");

    Et pour le moment ça fonctionne sur IE et FF ouf !

    0
    1. Brachior Messages postés 616 Statut Membre 46
       
      meme le '€' ? ^^
      normalement il n'est pas ds iso-8859-1 mais ds le iso-8859-15 ^^
      0
    2. deer
       
      this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1"); 


      je confirme ca marche aussi pour moi

      merci
      0
  4. PhP Messages postés 1774 Statut Membre 606
     
    Ben vi même le € ! par contre c'est vrai j'ai bidouillé un peu pour le ... &
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. phima
     
    utilise encodeURIComponent dans ton encodate de tes posts à la place de escape et tout sera résolu (et tu pourras envoyer de zolis posts en utf-8
    0
  7. leFred
     
    Je me permets de remonter ce fil car je cherche à faire la même chose; ça fonctionne à peu près avec dans l'appel ajax :

     xhr_object.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");


    dans chaque page :
    header('Content-Type: text/html; charset=ISO-8859-15');


    et pour le texte saisi:
    html_entity_decode(htmlentities($msg),ENT_NOQUOTES);


    SAUF lorsqu'on fait du copier coller (exemple je copie ' " / \ & é è à @ (TM) (tm) € (euro) sur cette même page et je le colle dans ma zone de saisie, sur IE (6) j'ai les carré a la place de l'euro et du TM

    sinon ça roule sur FF

    Une idée?
    0