IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Encodage d'un AJAX


Sujet :

Langage PHP

  1. #1
    Membre très actif
    Avatar de JPBruneau
    Homme Profil pro
    retraité
    Inscrit en
    Août 2019
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : retraité
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2019
    Messages : 262
    Par défaut Encodage d'un AJAX
    J'ai résolu les défaults d'encodage du texte renvoyé par le PHP apelé à l'ancienne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script type="text/javascript">
    var LeSelect=0;          
    function maFonctionAjax(A1,A2,action,A3,A4,b1,b2,b3,b4,b5,b6,b7,b8,b9)
    {
      var MonAjax;
      if (window.XMLHttpRequest){ MonAjax = new XMLHttpRequest();}
      else if (window.ActiveXObject) {MonAjax = new ActiveXObject('Microsoft.XMLHTTP');}
      else {
        alert("Votre navigateur n'est pas adapté pour faire des requétes AJAX..."); 
        MonAjax = false;   }
      MonAjax.open('POST','smala_dvd_ajax.php',true);
    En effet il à juste sufit que dans mon PHP appelé sur le serveur et dont le seul affichage est l'echo de la variable
    soit fabriqué sur le serveur dans un Doctype identique au html du visiteur celui qui contient l'appel du PHP serveur ,j'ai donc sur le serveur
    dans mon 'smala_dvd_ajax.php', :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php      
    session_start();   
    $b = (isset($_SESSION['b'])) ? $_SESSION['b'] : ''; 
    if ($b!='Idcab!Xx44') {
     header('Location:https://fox-infographie.com/index.php');
     exit; 
    }
    header('Content-type: text/html; charset=UTF-8'); 
    ini_set ('max_execution_time', 0);
    ini_set('memory_limit', '1024M');
    require('zzz/32bdd.php');         /* =>  ouvre mysql  et secure en + au retour il sait s il est en local ou non */
    if ($Bloque=="O")  $_SESSION['bloque']="o";
    ?> 
    <!DOCTYPE html><html lang='fr'><head> 
    <meta charset="UTF-8">
    </head><body>
    <?PHP
    Cela faiyt 20 an que j'utilises cette méthode mais vraiment c'est tellement curtieux, que je voulais votre avis ! merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Autre
    Inscrit en
    Juillet 2021
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Juillet 2021
    Messages : 495
    Par défaut
    Bonjour,

    Si je comprends bien, tu as ajouté un doctype avec le charset="UTF-8" dans le retour ajax afin que l'encodage soit bien pris en compte ? C'est en effet curieux.
    Le fichier smala_dvd_ajax.php est bien lui même encodé en UTF-8 sans BOM ?

    Si la requête ajax doit retourner une page html complète, le doctype est alors justifié.
    Si la requête ajax doit retourner un fragment html, le doctype ne devrais pas être nécessaire.

    L'entête charset de la réponse http suite à la requête ajax semble déjà défini en php via header('Content-type: text/html; charset=UTF-8');.
    Pour que cette instruction soit bien prise en compte, il ne faut aucun espace, ligne vide ou autre caractère avant l'ouverture de la première balise <?php au début du fichier smala_dvd_ajax.php (sauf si l'output buffering est activé sur le serveur).

    As tu consulté le journal d'erreur de ton serveur web pour vérifier si tu avais d'éventuelles erreurs PHP (notamment sur la fonction header si celle-ci n'est pas prise en compte) ?

    Pour t'aider à débuguer les requêtes http/ajax, tu peux aussi utiliser l'onglet Réseau dans les outils de développement du navigateur.
    Tu pourras analyser la requête ajax (XHR) et notamment les entêtes de la réponse http (contenant l'entête charset).
    https://firefox-source-docs.mozilla....tor/index.html
    https://developer.chrome.com/docs/de...?hl=fr#network

    Pour vérifier que les entêtes http définies via la fonction php header() sont bien prises en compte, tu peux éventuellement créer un fichier de test avec un autre type de retour.
    Par exemple, fichier smala_dvd_ajax_test.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    header('Content-Type: application/json; charset=UTF-8');
    echo json_encode(['foo' => 'bar']);
    Puis appelle ce fichier via la requête ajax ou même directement via son url dans le navigateur pour vérifier les entêtes http (Content-Type et charset) retournées par le serveur dans l'onglet Réseau des outils de dév.

Discussions similaires

  1. [PHP 5.1] POST encodage des PHP AJAX
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 06/02/2014, 14h34
  2. problème encodage avec formulaire ajax
    Par gyome314 dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 21/06/2007, 13h14
  3. [AJAX] Encodage caractères
    Par pit9.76 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2006, 17h51
  4. encodage des données lors du post en AJAX
    Par jibouze dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 19/04/2006, 21h26
  5. xhr(ajax?) xml et encodage
    Par tthierry dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 05/12/2005, 16h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo