lettres accentuées, ajax et serveurs

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : lettres accentuées, ajax et serveurs

par PatriceRapaport » 22 mars 2008, 17:50

Celà ne donne rien pour moi effectivement. par contre la solution que j'ai communiqué un peu plus haut fonctionne très correctement

par Invité » 22 mars 2008, 10:39

J'ai essayé et cela ne donne rien pour moi

par jojolapine » 21 mars 2008, 14:06

Je ne sais pas si ça peut faire partie du problème, mais j'avais un problème avec utf8 lorsque les données venait d'une bdd...
Du coup j'ai réussit à le régler en éxécutant cette requête avant:

Code : Tout sélectionner

SET NAMES utf8
Est-ce que tu fais déjà celà?

par gwendal » 21 mars 2008, 12:49

J'ai le même problème avec un script que je fais sous drupal avec de l'ajax

Quand j'envoi le post au script drupal l'ensemble de la chaine est bien en UTF-8 et si j'affiche ma variable juste avant l'enregistrement dans la base, il n'y a pas de problème d'encodage, mais si je l'enregistre dans la base dans un champ utf8_general_ci les caractères sont encodés

Exemple : é devient é et à devient Ã

Il y a peut-être un rapport avec le fait que l'envoi en post à mon ajax ce fait par une variable encodée par encodeURIComponent

par PatriceRapaport » 21 mars 2008, 11:22

Oui bien entendu, ce header est présent.

La solution dont je parle plus haut est opérationnelle, elle fonctionne!!!
Mais je trouve cela vraiment lourd

par jojolapine » 21 mars 2008, 11:04

Avant de faire tout ça...
Est-ce que sur tes pages php appelée par ajax tu mets un header() "d'encodage" (dsl j'ai plus la syntaxe en tête: encoding? content-encoding?) bref vous m'aurez compris ;)

par PatriceRapaport » 20 mars 2008, 20:09

Je pense avoir trouvé une solution

si les données a afficher ne viennent pas d'une base de données:
-si l'affichage ne provient pas d'ajax echo html_entity_decode(htmlentities('é è à')
- si l'affichager provient d'ajax alors pour IE: echo 'é è à' pour firefox echo html_entity_decode(htmlentities('é è à', ENT_COMPAT, 'UTF-8'))

si les données viennent d'une base mysql avec default-charset latin1,
- si l'affichage ne provient pas d'ajax echo utf8_encode($db[$maZone])
- Si l'affichage provient d'ajax pour IE: utf8_encode($db[$maZone]) et pour firefox html_entity_decode(htmlentities($db[$maZone]))

Voila c'est peut-être un peu lourd, mais ça a l'air de fonctionner sous Wndows et sous Linux.

par Berzemus » 20 mars 2008, 17:50

ach... ajax et les lettres accentuées..

Comment tu fait transiter tes données ?

Le meilleur conseil que je peux donner, c'est de te renseigner sur Json, format particulièrement adapté à l'envoi de données vers JS.

par PatriceRapaport » 20 mars 2008, 15:19

Alors que firefox écrit catégorie IE écrit cat?gorie
Je vais tester l'encodage de mes tables en utf8, mais le problème se pose également pour des alert en javascript ou des messages entre quotes en PHP

Patrice

par Alkann » 20 mars 2008, 15:09

Si les données proviennent de la base de donnée. Le mieux est d'avoir l'ensemble de ton application (code + bdd) en encodage UTF8, cela t'évite ces problèmes.

Pour mieux t'aider, peux tu mettre un exemple d'accentuation des retours de requêtes Ajax?

par PatriceRapaport » 20 mars 2008, 13:57

Merci de ta réponse.

Oui, j'ai bien la ligne <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> dans mes fichiers.
En définitive, mon problème ne se pose que sous linux et encore pour une réponse fournie par Ajax. Dans les autres cas de figure, avec les tests que j'effectue pour firefox et IE, avec ou sans ajax, tout se passe correctement

J'avoue humblement que je suis allé lire l'article sous PHP France, et que je n'ai pas tout saisi!
Il y a peut-être une chose importante: les données que j'affiche proviennent d'une Base de données mysql. Mais en tout état de cause, puisqu'elles s'affichent correctement si cela ne vient pas d'ajax, pourquoi le problème se pose-t-il sous ajax?

Patrice

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Ryle » 20 mars 2008, 13:35

En complement du post de Neveldo, j'ajouterais que l'information concernant le content-type utf8 doit également être spécifiée dans le script php interrogé par ajax et qui lui retourne des données dans ce charset :)

par spelou » 20 mars 2008, 12:22

Bonjour PatriceRapaport,

As tu rajouté le meta suivant afin de spécifier que ta page est bien en UTF-8 :
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Il est aussi possible que tu ais besoin de spécifier le charset utilisé dans ton httpd.conf , ou à défaut dans un .htaccess de cette façon :
AddDefaultCharset UTF-8
Un dernier point, tu sembles développer sous Windows et/ou Linux. Sous windows, lorsque tu crée un nouveau fichier, par défaut son charset sera en ISO. Mais avec n'importe quel bon éditeur, tu devrais pouvoir encoder tes fichiers en UTF-9 (sans BOM).

Bonne journée !

[edit] Je rajoute que certaines fonctions PHP supportent mal l'utf-8, il est donc nécéssaire de décoder tes chaines en ISO, de les passer à la moulinette, puis de les réencoder en UTF-8. Il existe aussi une "variante" fonctionnelle de ces fonctions, fait un tour ici pour en savoir plus :)

lettres accentuées, ajax et serveurs

par PatriceRapaport » 20 mars 2008, 09:34

Je suis en train de développer un site en utilisant la version CS de Dreamweaver (ne remettons pas cela en cause).
Les en-têtes fournis par dreamweaver sont:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">


lorsque je veux afficher des minuscules accentuées, l'enfer commence selon que je consulte le site sous Firefox ou Internet Explorer, et selon que l'affichage se fasse en appelant la page ou en affichant une réponse fournie par ajax. Le tout bien entendu est modulé (sinon ce ne serait pas drole) selon que le site soit hébergé sur un serveur apache tournant sous windows ou sur un serveur apache tournant sous LINUX (Debian).

Tant que je n'utilise pas ajax, tout se passe correctement que le serveur soit windows ou linux:
j'utilise la fonction utf8_encode pour afficher le libelle: echo utf8_encode($libelle)

Si par contre le libellé est fourni par une réponse ajax, tant que je reste sur le serveur windows, tout est encore OK:
pour firefox j'envoie echo $libelle alors que pour IE j'envoie echo utf8_encode($libelle).

Mais sous le serveur LINUX, alors que cela fonctionne pour firefox, j'obtiens un affichage farfelu sous IE dès qu'il y a des caractères accentués.

Je ne m'en sors pas. Alors si quelqu'un sait a une idée!!!!