Aller au contenu

charger un fichier avec des accents


-ZN-

Sujets conseillés

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:

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour :)

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

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?

Lien vers le commentaire
Partager sur d’autres sites

C'est normal dans votre cas :)

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

é en iso doit être écrit é

Lien vers le commentaire
Partager sur d’autres sites

Il est possible de spécifier le type d'encodage de ta requète :

tonObjetXmlHTTPRequest.setRequestHeader("Content-Type", "text/plain;charset=iso-8859-1");

Lien vers le commentaire
Partager sur d’autres sites

Un code comme ça devrait fonctionner?

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 :)

Lien vers le commentaire
Partager sur d’autres sites

J'ai testé, ça ne change rien :(

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...

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

heu comme je débute je m'en sors pas facilement ...

quand j'envoie

xhr.setRequestHeader("Content-Type", "text/plain;charset=utf-8");

mon script ne fonctionne meme plus.

cette ligne fonctionne

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

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

toujours perdu ...

Lien vers le commentaire
Partager sur d’autres sites

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 :

xhr.setRequestHeader("Content-Transfer-Encoding", "utf-8");

Par contre, je ne suis pas certain de la syntaxe... :blush:

Lien vers le commentaire
Partager sur d’autres sites

N'importe quoi ... :nonono:

setRequestHeader C'est l'entête qu'on envoie et non qu'on réceptionne. Je pensais que c'était clair :smartass: 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()

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

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 ...

<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

<?
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

<? 
$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 :)

Modifié par -ZN-
Lien vers le commentaire
Partager sur d’autres sites

Heu... en fait ca passe là ;)

il suffisait d'ajouter

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

dans mon ajaxLoadMessage.php

cool :)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...