Version complète: sur le forum Webmaster Hub : charger un fichier avec des accents
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > AjaX et JavaScript
-ZN-
Bonjour,

j'ai un problème un peu embetant... je dois loader le contenu d'un fichier pour remplir le contenu d'un textarea. Si je fais ça en php tout simple, aucun problème ...

le truc, c'est que je dois faire ça en ajax, car selon la valeur d'une variable (sélectionnée par l'utilisateur) un peu plus haut dans ma page, on charge un fichier différent. Et ça ne passe pas bien du tout dès que j'ai des accents ...

si j'ai des accents dans mes fichiers à charger, mon textarea est plein de �. Si je remplace mes accents par leur code html, ça fonctionne, mais le textarea n'est pas lisible par les utilisateurs du site, ce qui est assez embetant blushing.gif

est ce que quelqu'un aurait une solution?

j'ai cherché des topics équivalents mais je n'ai pas trouvé ce que je cherchais.

merci d'avance pour votre aide,

ZN
Ifmy
Bonjour smile.gif

Encore et toujours le problème de l'encodage.

L'encodage et le charset de vos pages doivent être identiques. Quant à l'ajax faites un header en php dans la page appelé pour forcer le charset ça devrait fonctionner wink.gif
-ZN-
CITATION(Ifmy @ lundi 12 mai 2008 à 12:31) *
L'encodage et le charset de vos pages doivent être identiques. Quant à l'ajax faites un header en php dans la page appelé pour forcer le charset ça devrait fonctionner wink.gif



merci pour votre réponse. Ma page html est en charset=iso-8859-1 , et je charge le contenu d'un fichier txt tout simple ...

Je ne vois pas ce que vous voulez dire par "faites un header en php", pouvez-vous s'il vous plait être plus précis? un exemple peut-etre?



Ifmy
C'est normal dans votre cas smile.gif

éèçà... c'est de l'utf-8 et non de l'iso

é en iso doit être écrit é
Bovino
Il est possible de spécifier le type d'encodage de ta requète :
CODE
tonObjetXmlHTTPRequest.setRequestHeader("Content-Type", "text/plain;charset=iso-8859-1");

-ZN-
Un code comme ça devrait fonctionner?

CODE
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=utf-8');


(ça passe pas j'ai toujours les caracteres bizarres)

merci pour vos reponses smile.gif
Bovino
Tu es sûr que ta réponse est encodée en UTF-8 ?
-ZN-
J'ai testé, ça ne change rien sad.gif

pareil avec le charset de ma page égal à iso-8859-1
et mon xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');

je n'y comprends rien...
Bovino
C'est normal, si tu précises que tu récupères un urlencoded, les caractères accentués sont transformés en %Hexa.
Essaye en précisant plutôt text/plain et utf-8. Ca devrait fonctionner...
L'idéal étant comme souvent de ne pas mettre d'espaces ni d'accents dans les noms de fichiers, ça pose toujours des problèmes surtout si on associe le html, le js, le php etc...
-ZN-
heu comme je débute je m'en sors pas facilement ...

quand j'envoie
CODE
xhr.setRequestHeader("Content-Type", "text/plain;charset=utf-8");


mon script ne fonctionne meme plus.

cette ligne fonctionne

CODE
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');


mais j'ai le probleme sur tous les caractères spéciaux

toujours perdu ...
Bovino
Effectivement, text/plain n'est pas accepté, tu peux essayer avec text/html, si ça passe toujours pas, utilise cette autre méthode de xmlhttprequest :
CODE
xhr.setRequestHeader("Content-Transfer-Encoding", "utf-8");


Par contre, je ne suis pas certain de la syntaxe... blush.gif
Ifmy
N'importe quoi ... nonono.gif

setRequestHeader C'est l'entête qu'on envoie et non qu'on réceptionne. Je pensais que c'était clair smartass.gif l'eau et l'huile ne ce mélangent pas.

Bon je vous donne une astuce simple.

Quand on vois des ? sur sa page comme montré plus haut. La page est en ISO, le contenu en UTF-8
Quand on vois des ©etc... La page est en UTF-8 et le contenu en ISO

Donc :

Soit vous encodé vos caractères "exotiques" comme je vous en ai fais l'exemple plus haut.
Soit vous passer vos page en UTF-8 (meilleur choix de pérennité)

et de toute façon évitez les .txt faites une page en php avec un echo "votre contenu" et un header content-type

Si vous tenez vraiment à rester en iso utilisez aussi le php en fessant un utf8_decode()
-ZN-
Ok, mais je ne comprends pas tout (je que je fais ne fonctionne pas) ... j'explique détails ce que je fais. J'aimerai bien comprendre, parce que là je suis perdu ...

C'est pour une page de validation d'inscription à un site. Cette page est en iso-8859-1

Selon la valeur d'un select (langue), je charge en ajax le contenu d'un fichier php

Voilà l'ensemble de fonctions qui chargent la langue:

le javascript qui envoie les parametres au script php, qui recupere le contenu du bon fichier, et qui met le contenu de ce fichier dans un textarea ... en gros tout fonctionne, sauf l'encodage ...

CODE
<script type='text/javascript'>

function getXhr(){
var xhr = null;
if(window.XMLHttpRequest) // Firefox et autres
   xhr = new XMLHttpRequest();
else if(window.ActiveXObject){ // Internet Explorer
   try {
        xhr = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
                    xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
    }
else {
       alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
       xhr = false;
      }
return xhr;
}


function goLanguage(){
var xhr = getXhr();
xhr.onreadystatechange = function(){
// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
if(xhr.readyState == 4 && xhr.status == 200){
    welcome = xhr.responseText;
    document.forms.form1.welcomemessage.value = welcome;
    }
}

xhr.open("POST","ajaxLoadMessage.php",true);
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

sel = document.getElementById('blogLanguage');
idlanguage= sel.value;
xhr.send("lang="+idlanguage);
    }
</script>



le script ajaxLoadMessage, qui en gros va charger le fichier dans la bonne langue

CODE
<?
switch ($_POST["lang"])
{
    case 0:
    $lang    =    'en';
    break;
    
    case 1:
    $lang    =    'es';
    break;
    
    case 2:
    $lang    =    'fr';
    break;        
}
        
include "lang/".$lang."/validate-reject.php";
echo ($welcomeMessage);        

?>


et enfin le fichier validate-reject.php

CODE
<?
$welcomeMessage    = "<html><body><p>Bonjour,</p>

<p>Ton inscription a été validée.</p>
<p>A bientôt</p>";
?>


pouvez vous s'il vous plait m'expliquer en détails ce que je dois faire et où (quel fichier)? Ca me tracasse ce truc, je n'arrive pas à comprendre ce que je dois faire ... Notez que je souhaite rester en ISO

Merci d'avance smile.gif
-ZN-
Heu... en fait ca passe là wink.gif

il suffisait d'ajouter

CODE
header("Content-Type: text/plain;charset=iso-8859-1");


dans mon ajaxLoadMessage.php

cool smile.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.