jQuery AJAX codage de caractères

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

voici le JS que j'utilise pour faire ceci:

    <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, c'est la réponse à la demande.

parce que c'est un site français, il y a beaucoup de lettres accentuées. J'utilise le jeu de caractères ISO-8859-15 pour cette raison. Toutefois, dans la réponse à ma demande AJAX, les accents deviennent ?parce que L'encodage des caractères semble avoir été changé en UTF-8.

Comment éviter cela? J'ai déjà essayé D'ajouter un peu de 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 marcher non plus. Toutes les pensées?

aussi, pendant que vous regardez ici...pourquoi la colonne de droite semble-t-elle devenir plus petite quand un la nouvelle page est chargée, provoquant la distorsion de la table et chaque <li> dans le <td> pour envelopper à la ligne suivante?

Cheers

56
demandé sur Walery Strauch 2009-02-16 17:30:49

22 réponses

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

MODIFIER

[ Copie D'Archive du fichier test. ] avec vos données

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

BTW, sauf si votre serveur est défini à php-process .les fichiers html, les fichiers que vous chargez avec ajax ne reçoivent pas votre charset 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)

22
répondu yoavf 2016-06-15 08:52:47

spécifiant le type de contenu sur L'appel AJAX 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 devez également spécifier le jeu de caractères sur le serveur.

<?php header('Content-Type: text/html; charset=ISO-8859-15'); ?>
60
répondu Magnar 2009-02-16 15:04:47
$str=iconv("windows-1250","UTF-8",$str);

ce qui m'a aidé sur le terme,

18
répondu anony 2012-08-17 15:18:31

vous devez configurer votre serveur pour utiliser ISO-8859-15 comme encodage de caractères (en ajoutant L'en-tête HTTP approprié). Le faire dans le corps du html n'aidera pas.

je peux voir cette ligne

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

à la source de votre html. Cela ne devrait pas arriver. En utilisant les en-têtes HTTP Live, Je ne vois pas l'en-tête HTTP charset approprié. Utiliser que pour votre première page et le service ajax.

10
répondu kgiannakakis 2009-02-16 14:53:27

je strongl suggèrent l'utilisation du javascript escape() la méthode

vous pouvez utiliser cela avec jQuery en saisissant une valeur de forme comme ceci:

var encodedString = escape($("#myFormFieldID").val());
7
répondu Doug 2010-05-11 23:42:25

pour mon application PHP la solution était d'inclure la fonction utf8_decode pour chaque variable get dans $_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!!!)

7
répondu Rafael - orafaelreis 2011-03-11 18:51:44

Lors de l'impression des variables dans le fichier ajax. Mettre un

htmlentities()

autour d'eux, voir si ça marche. Il travaillait pour moi dans une application islandaise ajax.

6
répondu Ólafur Waage 2009-02-16 15:00:14

j'ai eu des problèmes similaires, travaillant dans un système de commentaires de contenu dans notre portail Espagnol. Ce qui a finalement résolu mon problème, après de nombreuses heures de recherche, au lieu de jouer avec jQuery charset, qui semble utiliser utf-8 quoi qu'il arrive, c'était de décoder de utf-8 Retour à ISO-8859-1 dans le PHP qui a traité le POST ajax. En PHP il y a une fonction intégrée, utf8_decode() , donc la première chose que je fais avec la chaîne de commentaires est ceci:

$comentario = utf8_decode($_POST['comentario']);

(et puis j'ai utilisé nl2br() et htmlentities() fonctions PHP afin de préparer le texte à stocker avec des entités html au lieu de caractères spéciaux)

Bonne Chance Et la Paix dans tous les coins! Seba

4
répondu Sebastian Alberoni 2012-08-17 15:17:27

j'ai été bricolé avec ce problème et j'ai découvert que cette solution fonctionne pour Firefox et safari (Oui, je suis sur un mac en ce moment).

en recevant la demande, j'ai fait un content-type = iso-8859-1 ici:

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
  httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml; charset=ISO-8859-1');
        }
    }

s'il vous plaît dites-moi si quelqu'un découvre que cela ne fonctionne pas dans ie.

3
répondu Kyuss 2010-06-23 11:36:09

J'ai eu un problème similaire avec ASP avec mes pages. J'ai résolu ainsi:

1) inséré au début du fichier ASP appelé par la méthode jQuery ajax l'instruction:

Response.Charset = "windows-1252"

dans ma page asp avant que le jeu de caractères ne soit pas défini et j'avais enregistré mon fichier avec un encodage ANSI (avec un éditeur de texte comme notepad++)

2) dans le fichier html qui appelle le fichier ASP avec la méthode ajax jquery j'ai inséré le paramètre le type de contenu que vous voyez ci-dessous:

$.ajax({         
data: parameters,         
type: "POST",         
url: ajax_url,
datatype: 'html',         
contentType: "text/html;charset=windows-1252",

brièvement, il est important de définir dans votre fichier ASP le charset. Étrangement, je vois que mon jquery fonctionne avec windows-1252 mais ne fonctionne pas avec le charset ISO-8859-1: dans ce cas, la méthode ajax jquery donne une exception.

3
répondu Rob 2014-02-09 18:18:53

j'ai eu un problème avec les lettres suédoises/norvégiennes apparaissant comme des points d'interrogation, malgré avoir précisé:

contentType: "application/json; charset=utf-8",

ceci a été résolu en ajoutant encodeURIComponent à la chaîne.

url: "/set_comment.do?text=" + encodeURIComponent(comment),
2
répondu yngling 2012-02-26 18:35:37

j'ai essayé de nombreuses suggestions à lire dans un fichier texte avec des caractères spéciaux allemands (ä,ö,ü). À la fin:

 $.ajax({
        async:false,
        type: "GET",
        url: "data/FileName.txt",
        dataType: "text",
        contentType: "application/x-www-form-urlencoded;charset=UTF-8",
        success: function (data) {
           alert(data);
        }
    });

permettez-moi de lire dans les caractères spéciaux, mais seulement après que j'ai explicitement sauvé nom de fichier.txt au format UTF-8 . Le format standard pour enregistrer des fichiers texte dans L'éditeur de Windows est ANSI et non UTF-8, mais il peut être modifié si vous "enregistrer sous" et utiliser la dropbox à côté de la Bouton enregistrer ou utiliser un meilleur Éditeur pour commencer.

2
répondu jank 2013-09-10 20:17:19

je NE suis d'ACCORD que tout doit être en UTF-8, vous pouvez le faire fonctionner parfaitement avec la norme ISO 8859, je l'ai fait, merci de lire ma réponse ici.

ma réponse dans stackoverflow

1
répondu Rodrigo Asensio 2017-05-23 10:31:33
<script type="text/javascript">
  function GetContent(idUser){ 
    $.ajaxSetup({
      url: 'ping.php'
    });

    $.ajax({
      type: "POST",
      url: "blablabla.php",
      dataType: "text",
      data: ({ParamUserID:idUser}),// here we def wich variabe is assiciated
      contentType: "application/x-www-form-urlencoded; charset=iso-8859-1",
      success: function(html) {
        $('#user_specified_content').html(html);
      }
    });     
  }
</script> 

c'est le script d'où je tire mon contenu du blabla.php page.

quand je reçois mes données sur le succès, mes accents n'apparaissent pas.

j'ai trouvé une super bonne solution de travail par mes propres pour récupérer des données avec des accents sur les données récupérées de .success fonction

sur ma page blabla. Je l'ai fait pour apporter une solution à mon problème:

j'utilise utf8_encode(place your data here) dans mon php fichier. Voir en action ci-dessous:

while( $row = sqlsrv_fetch_array($recordset) )
{                           
    <option value="<?php echo $row["xyz"]; ?>"><?php echo utf8_encode($row["gName"]) . ' | ' . utf8_encode($row["gManagerName"]); ?></option>                           
}
1
répondu classics40 2012-08-10 07:25:08

si toute L'application utilise ISO-8859-1, vous pouvez modifier votre jquery.js remplaçant toutes les occurrences de encodeURIComponent par escape (il y a 2 occurrences à remplacer dans le script jQuery actuel - 1.5.1)

Voir encodeUIComponent et escape pour plus d'informations

0
répondu Jonathan Pasquier 2011-03-23 12:09:13

j'ai fait face au même problème et essayé plusieurs façons. Et j'ai trouvé la solution. Si vous définissez l'en-tête de requête pour "Accept" comme ci-dessous;

$.ajax({
        data: parameters,
        type: "POST",
        url: ajax_url,
        dataType: 'json',
        beforeSend : function(xhr) {
            xhr.setRequestHeader('Accept', "text/html; charset=utf-8");
        },
        success: callback
});

vous verrez que tous les caractères semblent corrects

0
répondu Hüseyin BABAL 2012-05-21 08:02:21

je suis venu par cette question avec exactement le même problème que l'asker. Les réponses ici sont très informatives, et j'ai essayé presque toutes les réponses suggérées. Aucune des réponses ici n'a fonctionné pour moi cependant - il pourrait y avoir une légère différence dans mon problème. Et cela semble être le cas pour beaucoup. J'ai tellement essayé avant de finir avec une réponse.

donc maintenant j'ajoute à la liste déjà longue des réponses, une solution de mon propre qui a résolu mon type de codage problème.

j'ai juste fait deux choses. Dans le script de connexion à la base de données j'ai ajouté:

mysql_set_charset('utf8',$connection);

et à part cela:

  • j'ai changé L'encodage de tous les fichiers en UTF-8

le point est que tout doit être du même encodage. Et lors de la création de nouveaux fichiers php, pour les scripts, il ne suffit pas de changer l'encodage dans le script le fichier lui-même doit être codé correctement.

0
répondu Steeven 2012-07-07 18:27:23

vient de changer {"type":"GET"} en {"type":"POST"} et a fonctionné comme un charme avec ISO-8859-1

0
répondu MauroPorrasP 2012-08-17 15:17:59

j'ai eu le même problème avec les pages:

  • Afficher amende lorsqu'appelle normalement
  • avoir les caractères spéciaux foiré lorsqu'il est appelé via une demande ajax

pour résoudre le problème (en utilisant php), j'ai utilisé utf8_encode() ou htmlentities() sur les données source. Les deux ont fonctionné, je les ai utilisés dans différents projets.

0
répondu jeroen 2012-08-17 15:19:04

si vous utilisez CodeIgniter vous pouvez résoudre cela en ajoutant le code suivant à votre contrôleur avant de charger des vues (en supposant que vous avez charset correctement défini sur votre config. Sinon, mettez charset=whateveryouwant .

$this->output->set_header('Content-type: text/html; charset='.$this->config->item('charset'));

la façon dont je l'ai fait était d'ajouter cette ligne au constructeur de MY_Controller, ma superclasse pour tous les contrôleurs, de cette façon je m'assure que je n'aurai aucun problème d'encodage nulle part.

d'ailleurs, ce n'est pas affecter les retours JSON (qui sont encodés dans UTF-8).

0
répondu Christian Dechery 2013-08-11 15:31:04

j'ai essayé de lire un fichier JSON/text local en utilisant $.ajax et l'encodage n'ont pas fonctionné au début.. Je l'ai fait fonctionner en sauvegardant le fichier JSON comme encodage UTF-8. Cela peut être fait simplement par le bloc-notes windows.. utilisez "Enregistrer sous", puis sous le nom du fichier, vous pouvez définir L'encodage à UTF-8.

bonne chance!

0
répondu doron 2013-08-29 16:05:57

j'ai eu le même problème. J'ai fichier texte avec des données json qui a française texte. Il y avait toujours des problèmes d'affichage de certains caractères. Dans mon cas, le programme JavaScript utilise Ajax pour récupérer le fichier texte json comme suit:

$.ajax({
    async: false,
    type: 'GET',
    url: 'some-url',
    success: function(data, status) {
        mainController.constructionStageMaster = data.records;
     }
});

les données retournées avaient toujours des Lettres françaises accentuées incorrectes.

Le json texte se présente comme suit:

{
    "records": [
        {
            "StageDesc": "Excavation, Fondation et Bases",
            "Allowed": 9,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Étanchement et Remblayage",
            "Allowed": 3,
            "Completed": 0,
            "TotalCompleted": ""
        },
        {
            "StageDesc": "Encadrement et revêtement mural intermédiaire",
            "StageDesc_fr": "Encadrement et revêtement mural intermédiaire np++",
            "StageDesc_fr2": "Encadrement et revêtement mural intermédiaire",
            "Allowed": 15,
            "Completed": 0,
            "TotalCompleted": ""
        }
        ...
    ]
}

Remarque: dans l'exemple ci-dessus, le 3ème élément, j'ai placé le texte avec les lettres accentuées françaises é et ê correctes.

pour votre information, il semble qu'il y ait une configuration globale du projet Eclipse utilisant le codage de caractères ISO-8859-1 . Dans votre cas, il pourrait être encodage différent.

après avoir vérifié les solutions ci-dessus et avoir joué avec le projet, c'est ce qui a résolu mon problème:

  • Trouver la source du texte qui affiche correctement le texte français
  • copier le texte
  • Goto Eclipse, ouvrir le fichier texte qui a les données
  • faites un clic droit sur le fichier dans l'Explorateur, ouvrez propriétés, et changez l'encodage en ISO-8859-1
  • fixer le texte de sorte qu'il soit affiché correctement. Utilisez copier / coller ou le clavier
  • vous pourriez avoir à utiliser les touches fléchées du clavier (gauche/droite) pour s'assurer qu'il ne sont pas des lettres coupables cachées qui apparaîtront sur HTML avec une forme drôle. Supprimer cette lettre cachée
  • Enregistrer le fichier

maintenant, dans mon cas, je n'ai pas spécifié d'options d'encodage dans L'appel Ajax et cela fonctionne très bien. Aussi, si je change l'encodage du fichier texte avec des données json, il fonctionne encore très bien.

Tarek

0
répondu tarekahf 2016-11-04 18:48:52