60 votes

Codage des caractères par jQuery AJAX

Je suis en train de coder un site web français. Il y a une page d'horaire, où un lien sur le côté peut être utilisé pour charger l'horaire d'un autre jour.

Voici le JS que j'utilise pour faire cela :

    <script type="text/javascript">
    function load(y) {
        $.get(y,function(d) {
            $("#replace").html(d);
            mod();
        });
    }
    function mod() {
        $("#dates a").click(function() {
            y = $(this).attr("href");
            load(y);
            return false;
        });
    }
    mod();
    </script>

L'AJAX actuel fonctionne comme un charme. Mon problème réside dans la réponse à la demande.

Comme il s'agit d'un site web français, il y a beaucoup de lettres accentuées. C'est pour cette raison que j'utilise le jeu de caractères ISO-8859-15. Cependant, dans la réponse à ma demande AJAX, les accents deviennent des ? parce que le codage des caractères semble être revenu à UTF-8.

Comment puis-je éviter cela ? J'ai déjà essayé d'ajouter du PHP en haut des documents demandés pour définir le jeu de caractères :

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

Mais ça ne semble pas fonctionner non plus. Vous avez des idées ?

De plus, pendant que vous regardez ici... pourquoi la colonne la plus à droite semble-t-elle devenir plus petite lorsqu'une nouvelle page est chargée, ce qui fait que le tableau se déforme et que chaque colonne est déformée. <li> au sein de la <td> pour passer à la ligne suivante ?

Cheers

67voto

Magnar Points 15142

La spécification du type de contenu lors de l'appel AJAX a résolu mes problèmes sur un site norvégien.

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        timeout: 20000,
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        dataType: 'json',
        success: callback
});

Vous devrez également spécifier le jeu de caractères sur le serveur.

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

2 votes

C'est bizarre, j'ai dû mettre contentType : "application/x-www-form-urlencoded;charset=UTF-8" dans mon appel ajax (avec le plugin jquery form) pour fixer l'encodage des caractères dans mes pages ISO-8859-1/serveur.

1 votes

+1 Merci ! J'essayais de comprendre comment spécifier un type de contenu avec ajax comme le type ci-dessus pour passer à UTF-8 et vous m'avez donné exactement ce dont j'avais besoin.

0 votes

Merci pour cela ! Travaillant dans un environnement Python/CGI, l'en-tête que je devais fournir sur le serveur était le suivant : print("Content-Type: text/html; charset=ISO-8859-15 \n")

26voto

yoavf Points 4410

UTF-8 est censé gérer tous les accents et les caractères étrangers - pourquoi ne pas l'utiliser sur votre source de données ?

EDITAR
[ Copie d'archive du fichier de test. avec vos données

Tout devrait être UTF-8 en premier lieu. J'ai chargé les fichiers dans notepad++, les ai convertis en utf-8 et ai changé manuellement les caractères en accents si nécessaire. Une fois fait, tout fonctionne comme un charme.

Par ailleurs, à moins que votre serveur ne soit défini pour traiter les fichiers .html avec php, les fichiers que vous chargez avec ajax n'obtiennent pas votre jeu de caractères iso. Si vous insistez pour utiliser le jeu de caractères iso, demandez un fichier php au lieu d'un fichier html, et définissez le jeu de caractères dans l'en-tête (pas dans le fichier lui-même).

0 votes

Ça ne marche pas. Voici la page avec un jeu de caractères UTF-8 : aquate.us/u/7183981145359693722.jpg Comme vous pouvez le voir, les accents sont encore massacrés.

0 votes

Ça ne devrait pas arriver. Quelle est votre source de données ? Une base de données ? Fichier texte plat ?

0 votes

Ce n'est pas le cas avec la source de données, même si la même chose se produit. C'est si vous chargez simplement une page HTML avec des accents sur un jeu de caractères UTF-8.

20voto

anony Points 121
$str=iconv("windows-1250","UTF-8",$str);

ce qui m'a aidé au final

0 votes

Tu es un héros, ça m'a aidé à envoyer des lettres accentuées comme é à travers une requête AJAX.

0 votes

A sauvé ma journée. Merci beaucoup... Cela devrait être la réponse acceptée...

10voto

kgiannakakis Points 62727

Vous devez configurer votre serveur pour qu'il utilise ISO-8859-15 comme codage des caractères (en ajoutant l'en-tête HTTP approprié). Le faire dans le corps du html ne vous aidera pas.

Je vois cette ligne

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

à la source de votre html. Cela ne devrait pas se produire. En utilisant Live HTTP Headers, je ne peux pas voir l'en-tête HTTP approprié. Utilisez-le à la fois pour votre première page et pour le service ajax.

7voto

Pour mon application PHP, la solution a été d'inclure la fonction utf8_decode pour chaque variable obtenue en $_POST .

Ex : (CÔTÉ SERVEUR)

if( strtoupper($_SERVER['REQUEST_METHOD']) == "POST" ){
$variable = htmlentities($_POST['variable']); // wrong
$variable = htmlentities( utf8_decode($_POST['variable']) ); // right
}

Abraços !!! (Bye Bye !!!)

0 votes

Merci, Rafael ! J'ai cherché pendant des années en essayant toutes les suggestions que j'ai pu trouver et finalement cela a résolu le problème pour moi ! utf8_decode était ce qui manquait ! Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X