JQuery : problème d'affichage/encodage HTML

Résolu
Mr Z Messages postés 7 Date d'inscription mercredi 14 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009 - 15 oct. 2009 à 11:07
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 - 16 oct. 2009 à 13:14
Bonjour,
j'ai un soucis d'affichage/encodage d'une chaîne en HTML.
Sur ma base MySql est enregistré une chaîne encodée utf8_general_ci.

Je récupère cette chaîne via PHP, dans une boucle while, et l'insère dans un tableau Javascript :
<script language="javascript" type="text/javascript">
var commentTabJS = new Array();
<?php //la fonction/requête de récupération
$contenu = aLaUne();
//la boucle
while (list($id, $donnees) = each($contenu)){
//données brut (ex:réalisé par machin.
Carte...)
$str = $donnees['commentaires'];
//je décode les é, etc.
$str = html_entity_decode($str, ENT_QUOTES, 'UTF-8');
//je vire les retours chariot
$str = str_replace(CHR(13).CHR(10),"",$str);
//j'encode ma chaîne "cleanée" pour l'insérer dans un tableau Javascript
$str = htmlentities($str, ENT_QUOTES, 'UTF-8');
echo 'commentTabJS.push("'.$str.'");';
} ?>
</script>

Ensuite, j'utilise jQuery pour afficher cette chaîne dans une DIV (class="informations") :
<script language="javascript" type="text/javascript">
function loadContenu(i){
var iOK = i.substr(4);
//je récupère le bon texte en fonction de l'ID du bouton sélectionné
var texte = commentTabJS[iOK];

//Et là c'est la m... la chaîne est bien en HTML mais s'affiche tel quel...
//Les balises s'affichent comme du texte...
//J'ai fait un essai avec une fonction trouvée ici : http://phpjs.org/functions/html_entity_decode:424
//mais ne fonctionne pas...
//texteOK = html_entity_decode(texte, ENT_QUOTES, 'UTF-8');
$(".informations").html(''+texte+'

');
}
</script>

Voilà, je suis bien bloqué.
Je suis pas très à l'aise avec jQuery. J'ai de bonnes bases en Javascript, mais bon.

Merci de l'aide :)
++

Z

6 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 oct. 2009 à 11:14
Bonjour,
>>Je suis pas très à l'aise avec jQuery.
oulah... moi non plus

pour le reste faut être "cohérent" partout,
_ sauver ses sources en utf-8 ( sans bom )
_ mettre la balise <meta http-equiv="content-type"
content="text/html; charset=UTF-8" /> en html
_ mettre header('Content-Type: text/html; charset=utf-8');
coté php
_ il faut aussi vérifier si le utf8_general_ci
de la base c'est la même chose que "utf-8"

et les decode doivent être inutiles

Cordialement [mon Site] [M'écrire] Bul
Mr Z Messages postés 7 Date d'inscription mercredi 14 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 11:28
Bonjour Bul3,

>> sauver ses sources en utf-8 ( sans bom )
le fichier est bien en utf-8. Qu'est ce que tu entend par "bom" ?

>> mettre la balise <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> en html
bien présente.

>> mettre header('Content-Type: text/html; charset=utf-8');
bien là aussi.

>> il faut aussi vérifier si le utf8_general_ci de la base c'est la même chose que "utf-8"
C'est plus flou. Mais je préfère partir des données brutes que je récupère.
Si je vais dans phpMyAdmin, le champ "commentaires" affiche : (...)réalisé par machin.
Carte(...)

>> et les decode doivent être inutiles
Les encode/decode sont là pour que je puisse insérer ma chaîne dans le tableau Javascript,
car sinon les caractères et autres retours chariot font plantés l'insertion...

Z
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
15 oct. 2009 à 11:42
>>Qu'est ce que tu entend par "bom" ?
oh, par là j'entends pas grand chose
c'est un codage un peu particulier de utf-8
qui ne convient pas pour ici
>>utf8_general_ci de la base
il y a plusieurs choix au niveau utf8 dans une base
"utf8_general_ci" correspond-il à l' "utf_8 php et html" ?
>>encode/decode
pas regardé de près, mais comme j'ai vu
des 'utf8' : html_entity_decode($str, ENT_QUOTES, 'UTF-8');
à ce que vous nous dites, tout semble ok, sauf donc
à vérifier utf8_general_ci, les html_entity_decode...
pas de raisons que ça ne fonctionne pas,
et jquery n'a probablement rien à y voir (quoique ?).
Mr Z Messages postés 7 Date d'inscription mercredi 14 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 11:59
J'ai fait des tests avec d'autre encodage sur le champ et cela produit les même résultats.

Ce que je me dis c'est que, comme la chaîne s'affichant dans ma DIV est :
Anagramme réalisé par Jean-Claude Mattrat.
Carte de correspondance de JBA.
Voir aussi Édition JBA.

Je me dis qu'une simple fonction html_entity_decode pourrait m'aider.
C'est pour cela que j'ai cherché un équivalent Javascript de la fonction php.
Or la fonction que j'ai trouvé semble générer une erreur...
La fonction en question :
function html_entity_decode(string, quote_style) {

var hash_map {}, symbol '', tmp_str = '', entity = '';
tmp_str = string.toString();

if (false (hash_map this.get_html_translation_table('HTML_ENTITIES', quote_style))) {
return false;
}

for (symbol in hash_map) {
entity = hash_map[symbol];
tmp_str = tmp_str.split(entity).join(symbol);
}
tmp_str = tmp_str.split(''').join("'");

return tmp_str;
}

Elle ne semble pas avoir d'erreur ? non ?

Z

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mr Z Messages postés 7 Date d'inscription mercredi 14 juillet 2004 Statut Membre Dernière intervention 15 octobre 2009
15 oct. 2009 à 12:12
Constatation :
//récupération du texte depuis le tableau
var texte = commentTabJS[iOK];

//affichage via jQuery
//V1
$(".informations").html(''+texte+'

');
affiche :
Anagramme réalisé par Jean-Claude Mattrat.
Carte de correspondance de JBA.
Voir aussi Édition JBA.

//V2
$(".informations").get(0).firstChild.nodeValue = ''+texte+'

';
affiche :
Anagramme réalisé par Jean-Claude Mattrat.
Carte de correspondance de JBA.
Voir aussi Édition JBA.



Notez que la balise est correctement interprétée dans la version 1.
...je crois que je vais aller prendre l'air...

Z
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
16 oct. 2009 à 13:14
ah.. j'ai raté les messages ?
au fond, ça n'a plus aucun rapport
avec l'utf-8.. si j'ai suivi (?)
un souci d'interprétation des balises ?
comme c'est avec jquery :
Rejoignez-nous