HTML_ENTITIES_DECODE

Signaler
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
-
Messages postés
647
Date d'inscription
samedi 30 décembre 2000
Statut
Membre
Dernière intervention
20 juillet 2012
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51468-html-entities-decode

Messages postés
647
Date d'inscription
samedi 30 décembre 2000
Statut
Membre
Dernière intervention
20 juillet 2012
5
-_-

Une petite question, pourquoi n'utilise dont pas ma solution. Elle est encore plus optimisé et prend moins de place

---> 163 caractères pour moi et + de 5000 pour toi O_O

5000 caractères !!!! C'est 5, 218 KO !!!! C'est le cinquième de la taille de JQuery, qui fait des centaines de fonctionnalité de plus !!!

Désolé, mais je ne comprends pourquoi tu ne regardes pas ma solution, elle est cross-browser : testé avec Safari, IE, Firefox, Opéra et Chrome et surtout, mais SURTOUT, elle prend 33 fois moins d'espace !!! Désolé mon emportement, mais ça dépasse ma logique ^^ Quelqu'un pour me dire ce qui cloche dans la fonction ? Y a-t-il un bug (je peux essayer de régler) ? Ou alors la fonction est-elle trop simple ?

Je reposte :

-----------
function convertToHex(ty){

tn=document.createElement("div");
tn.innerHTML=ty;
yn= tn.innerText || tn.textContent || tn.style.content;
return escape(yn);

}
/*Utilisation*/
alert(unescape(convertToHex("" + é")));
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Bon finalement voici la fonction complète et révisé.

Quelques modifications depuis mon dernier commentaire....

J'ai enlever la clause insensitive de l'exp reg afin de ne pas mélanger par example É et é
J'ai complèté la liste des caractères.
J'ai ajouté un condition undefined aux entités qui commence avec un # puisqu'elles sont extraites de la variable entities.
J'ai aussi modifié la longueur des entitiés nommées comme À pour prendre l'entitée complète 4 étant trop court.

Encore une fois merci à Arto_8000 pour sa grande aide!!
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Correction voici la fonction que j'utilise maintenant,

function html_decode(html) {
var matches = html.match(/&(#[0-9]{1,3}|[a-z]{2,6});/gi);
var nameEntities = {
quot : "%22",
apos : "%27",
amp : "%26",
lt : "%3C",
gt : "%3E",
nbsp : "%A0",
agrave : "%E0",
224 : "%E0",
32 : "%A0"
}

if (matches != null) {
for (i=0; i<matches.length; i++) {
var code = matches[i].substring(1,matches[i].length-1);
if (code.charAt(0) == "#") {
html = html.replace(matches[i], nameEntities[code.substr(1)]);
} else {
if (typeof nameEntities[code] != "undefined") {
html = html.replace(matches[i], nameEntities[code]);
}
}
}
}

return html;
}

je n'ai pas mis toutes les entités pour faire plus court...

Merci bcp Arto_8000
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1
Arto_8000: Merci beaucoup pour ces précision sur le replace avec et sans regexp, je n'étais pas au fait du fonctionnement et des différences entre les deux, mis-à-part du fait qu'un s'applique sur une exp reg et l'autre sur un string...

Ouin escape je connais mais finalement je dois le combiné avec fromCharCode...

Voici donc ce que j'utilise maintenant

function html_decode(html) {
var matches = html.match(/&(#[0-9]{1,3}|[a-z]{2,6});/gi);
var nameEntities = {
quot : "%22",
apos : "%27",
amp : "%26",
lt : "%3C",
gt : "%3E",
nbsp : "%A0",
agrave : "%E0",
224 : "%E0",
}

if (matches != null) {
for (i=0; i<matches.length; i++) {
var code = matches[i].substring(1,matches[i].length-1);
if (code.charAt(0) == "#") {
html = html.replace(matches[i], escape(String.fromCharCode(code.substr(1))));
} else {
if (typeof nameEntities[code] != "undefined") {
html = html.replace(matches[i], nameEntities[code]);
}
}
}
}

return html;
}
Afficher les 14 commentaires