Les Allergies
Alimentaires
Posez votre question Signaler

Php/ajax encodage partiel [Résolu]

Brachior 616Messages postés 21 octobre 2007Date d'inscription - Dernière réponse le 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
Lire la suite 

Php/ajax encodage partiel »

13 réponses
Réponse
+6
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
up !

personne ? =S
Brachior- 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)
Brachior- 30 mai 2008 à 20:00
c'est l'h de l'up Oo lol

bn dc tjs personne ? :snif: :'(
Brachior- 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 ^^
Ajouter un commentaire
Réponse
+0
moins plus
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 !

Brachior- 1 juin 2008 à 23:51
meme le '€' ? ^^
normalement il n'est pas ds iso-8859-1 mais ds le iso-8859-15 ^^
deer - 16 juil. 2009 à 15:02
this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1"); 


je confirme ca marche aussi pour moi

merci
Ajouter un commentaire
Réponse
+0
moins plus
Ben vi même le € ! par contre c'est vrai j'ai bidouillé un peu pour le ... &
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Ce document intitulé « php/ajax encodage partiel » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?