Php/ajax encodage partiel

Résolu/Fermé
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 - 30 mai 2008 à 15:09
 leFred - 30 mars 2010 à 17:28
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
A voir également:

6 réponses

poumon Messages postés 63 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 10 décembre 2008 11
21 juin 2008 à 20:00
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
30 mai 2008 à 16:36
up !

personne ? =S
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
30 mai 2008 à 17:54
re up!!
toujours personne ? =/
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
30 mai 2008 à 18:46
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
30 mai 2008 à 19:04
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
30 mai 2008 à 20:00
c'est l'h de l'up Oo lol

bn dc tjs personne ? :snif: :'(
0
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46 > Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009
30 mai 2008 à 22:27
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
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
1 juin 2008 à 22:48
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
Brachior Messages postés 613 Date d'inscription dimanche 21 octobre 2007 Statut Membre Dernière intervention 22 juin 2009 46
1 juin 2008 à 23:51
meme le '€' ? ^^
normalement il n'est pas ds iso-8859-1 mais ds le iso-8859-15 ^^
0
this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1"); 


je confirme ca marche aussi pour moi

merci
0
PhP Messages postés 1770 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
2 juin 2008 à 00:37
Ben vi même le € ! par contre c'est vrai j'ai bidouillé un peu pour le ... &
0

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

Posez votre question
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
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