Caractères accentués avec IE11 et xmlhttp
Bonjour,
Je rencontre un problème avec les caractères accentués sous IE11 via une requête xmlhtttp.
J'ai beaucoup cherché sur Internet et testé plein de choses mais rien n'y fait.
Mon but est de créer un menu déroulant alimenté par une base de données et une fois le choix fait les éléments associés dans la base de données s'affiche.
Les fichiers sont encodés en UTF-8 ainsi que la base de données.
Voici le premier fichier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
| <!DOCTYPE html>
<?php header('Content-Type:text/html; charset=UTF-8'); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
<link rel="stylesheet" href="stage.css">
<script>
function showUser(str) {
if (str == "Choisissez un domaine") {
document.getElementById("txtHint").innerHTML = "";
return;
} else {
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject){
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e) {
xmlhttp = false;
}
}
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
}
}
xmlhttp.open("GET","test.php?q="+str,true);
xmlhttp.send();
}
}
</script>
</head>
<body>
<?php
// On se connecte à MySQL
$bdd = new PDO('mysql:host=localhost;dbname=stage;charset=utf8', 'root', '');
// Si tout va bien, on peut continuer
// On récupère tout le contenu de la table jeux_video
$domaine = $bdd->query('SELECT DISTINCT Domaine FROM feuille1');
$ville = $bdd->query('SELECT DISTINCT Ville FROM feuille1');
// On affiche chaque entrée une à une
?>
<div class="intro">
<p>Pour vous aider dans votre recherche d'un lieu de stage, vous pouvez consulter les lieux de stages des années précédentes.
<br />
Deux choix de tri sont possibles : par domaine d'activité ou par lieux géographiques</p>
</div>
<br />
<script>
$(function() {
$( "button" )
.button()
.click(function( event ) {
event.preventDefault();
});
});
</script>
<div class="center-wrapper">
<button id = "choix">Trier par Domaines</button>
<button id = "ville">Trier par villes</button>
</div>
<br />
<div class="form" >
<form>
<select id="Domaines">
<option>Choisissez un domaine</option>
<?php
while ($donnees = $domaine->fetch())
{
?>
<option>
<?php
echo $donnees['Domaine'];
}
$domaine->closeCursor();
?>
</option>
</select>
</form>
<form>
<select id="Villes">
<option>Choisissez une ville</option>
<?php
while ($donnees = $ville->fetch())
{
?>
<option>
<?php
echo $donnees['Ville'] ;
}
$ville->closeCursor();
?>
</option>
</select>
</form>
</div>
<br />
<div id="txtHint"><b>Person info will be listed here...</b></div>
<script>
$("select").hide();
$("div#txtHint").hide();
$(":button#choix").click(function (){
$("#Domaines").show();
$(":button#ville").hide();
$("div").show();
});
$(":button#ville").click(function (){
$("#Villes").show();
$(":button#choix").hide();
$("div").show();
});
</script>
<script>
$( "#Domaines" ).change( function () {
var recup = "";
$( "#Domaines option:selected" ).each(function(){
recup += $(this).text();
});
showUser(recup);
}).change();
$( "#Villes" ).change( function () {
var recup = "";
$( "#Villes option:selected" ).each(function(){
recup += $(this).text();
});
showUser(recup);
}).change();
</script>
<br>
<div class="center-wrapper">
<button id ="reset">Faire une nouvelle recherche</button>
</div>
<script>
$(":button#reset").click(function (){
$("select").hide();
$("div#txtHint").hide();
$(":button#ville").show();
$(":button#choix").show();
$("select").each(function(){
$(this).prop('selectedIndex',0)
});
showUser("Choisissez un domaine");
});
</script>
</body>
</html> |
et voici le fichier test.html associé pour les tests notamment d'encodage
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| <?php header('Content-Type:text/html; charset=UTF-8'); ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<?php
$bdd = new PDO('mysql:host=localhost;dbname=stage;charset=utf8', 'root', '');
$q =$_GET['q'];
echo mb_detect_encoding($q);
echo $q;
if (isset($q))
// Ouverture du if
{
$result=$bdd->query("SELECT * FROM feuille1 WHERE Domaine ='".$q."'");
$result->execute(array($q));
$count = $result ->rowCount();
echo $count;
while($row = $result->fetch()){
echo $row['Entreprise'];
}
$result->closeCursor();
}
?>
</body>
</html> |
Que ce soit sous IE ou Firefox, "Médical" renvoie bien un encodage en UTF-8 mais cela s'affiche Mcal sous IE et rien ne fonctionne alors que cela fonctionne sous Firefox.
Si je modifie l'encodage sous IE (menu ->affichage->encodage) par windows occidental, l'affichage n'est pas bon mais cela fonctionne !
J'ai réussi à faire afficher correctement Médical (sous IE) après la sélection mais la base de données ne le voit pas correctement.
Si je modifie l'encodage du php en ISO du premier fichier, cela fonctionne aussi (mais avec un mauvais affichage).
J'aimerais que tout s'affiche correctement et fonctionne. Je précise que tout fonctionne sans les caractères accentués.
Je sèche et comme je suis loin d'être un codeur chevronné, j'en appelle à votre aide.
Merci d'avance.
PS : Si vous voyez des choses à améliorer dans mon code, n'hésitez pas. Je teste en local sous Wamp.