Php/ajax encodage partiel
Résolu
Brachior
Messages postés
613
Date d'inscription
Statut
Membre
Dernière intervention
-
leFred -
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
A voir également:
- Php/ajax encodage partiel
- Encodage ascii - Guide
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Php alert - Forum PHP
- Retour à la ligne php ✓ - Forum PHP
6 réponses
Salut
Moi je mets ce header :
au début de toutes mes pages .php qui seront appelées avec Ajax.
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.
up !
personne ? =S
personne ? =S
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)
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)
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 :
avant chaque affichage ;)
voila ^^ merci a moi
de rien de rien ..
si si j'insiste :)
bn ok j'arrete lol ^^ bye all ^^
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 ^^
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 !
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 !
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
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 :
dans chaque page :
et pour le texte saisi:
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?
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?