begin process at 2012 05 28 10:34:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > HTML_ENTITIES_DECODE

HTML_ENTITIES_DECODE


 Information sur la source

Note :
Aucune note
Catégorie :Trucs & Astuces Classé sous :Javascript, Caractères spéciaux, Accents, alert, confirm Niveau :Débutant Date de création :19/03/2010 Date de mise à jour :25/03/2010 18:04:39 Vu :3 480

Auteur : zen69

Ecrire un message privé
Site perso
Commentaire sur cette source (14)
Ajouter un commentaire et/ou une note

 Description

J'avais un problème avec les entités HTML lorsque je les envoyais dans un alert() ou dans un confirm().

Je me suis donc fait une petite fonction qui transforme les entités en Hexadécimal, puis je fais un unescape() dessus.

Je l'ai fais dans Excel, je n'ai eu aucun bogue à date mais puisque je l'ai fais dans Excel vite fait je ne garantis pas son intégrité.

Source

  • function html_entity_decode(str) {
  • // Convertis les entitees HTML en Hexadecimal
  • // Merci a Arto_8000 de www.javascriptfr.com
  • var matches = str.match(/&(#[0-9]{1,3}|[a-z]{2,6});/g);
  • var entities = {
  • 32 : "%20", 33 : "%21", quot : "%22", 34 : "%22", 35 : "%23", 36 : "%24", 37 : "%25", amp : "%26", 38 : "%26", 39 : "%27", 40 : "%28", 41 : "%29", 42 : "%2A", 43 : "%2B", 44 : "%2C", 45 : "%2D", 46 : "%2E", 47 : "%2F", 48 : "%30", 49 : "%31", 50 : "%32", 51 : "%33", 52 : "%34", 53 : "%35", 54 : "%36", 55 : "%37", 56 : "%38", 57 : "%39", 58 : "%3A", 59 : "%3B", lt : "%3C", 60 : "%3C", 61 : "%3D", gt : "%3E", 62 : "%3E", 63 : "%3F", 64 : "%40", 65 : "%41", 66 : "%42", 67 : "%43", 68 : "%44", 69 : "%45", 70 : "%46", 71 : "%47", 72 : "%48", 73 : "%49", 74 : "%4A", 75 : "%4B", 76 : "%4C", 77 : "%4D", 78 : "%4E", 79 : "%4F", 80 : "%50", 81 : "%51", 82 : "%52", 83 : "%53", 84 : "%54", 85 : "%55", 86 : "%56", 87 : "%57", 88 : "%58", 89 : "%59", 90 : "%5A", 91 : "%5B", 92 : "%5C", 93 : "%5D", circ : "%5E", 94 : "%5E", 95 : "%5F", 96 : "%60", 97 : "%61", 98 : "%62", 99 : "%63", 100 : "%64", 101 : "%65", 102 : "%66", 103 : "%67", 104 : "%68", 105 : "%69", 106 : "%6A", 107 : "%6B", 108 : "%6C", 109 : "%6D", 110 : "%6E", 111 : "%6F", 112 : "%70", 113 : "%71", 114 : "%72", 115 : "%73", 116 : "%74", 117 : "%75", 118 : "%76", 119 : "%77", 120 : "%78",
  • 121 : "%79", 122 : "%7A", 123 : "%7B", 124 : "%7C", 125 : "%7D", 126 : "%7E", 127 : "%7F", 128 : "%80", 129 : "%81", 130 : "%82", 131 : "%83", 132 : "%84", 133 : "%85", 134 : "%86", 135 : "%87", 136 : "%88", 137 : "%89", 138 : "%8A", 139 : "%8B", 140 : "%8C", 141 : "%8D", 142 : "%8E", 143 : "%8F", 144 : "%90", lsquo : "%91", 145 : "%91", rsquo : "%92", 146 : "%92", ldquo : "%93", 147 : "%93", rdquo : "%94", 148 : "%94", bull : "%95", 149 : "%95", ndash : "%96", 150 : "%96", mdash : "%97", 151 : "%97", tilde : "%98", 152 : "%98", trade : "%99", 153 : "%99", scaron : "%9A", 154 : "%9A", rsaquo : "%9B", 155 : "%9B", oelig : "%9C", 156 : "%9C", 357 : "%9D", 157 : "%9D", 382 : "%9E", 158 : "%9E", Yuml : "%9F", 159 : "%9F", nbsp : "%A0", 160 : "%A0", iexcl : "%A1", 161 : "%A1", cent : "%A2", 162 : "%A2", pound : "%A3", 163 : "%A3", curren : "%A4", 164 : "%A4", yen : "%A5", 165 : "%A5", brvbar : "%A6", 166 : "%A6", sect : "%A7", 167 : "%A7", uml : "%A8", 168 : "%A8", copy : "%A9", 169 : "%A9", ordf : "%AA", 170 : "%AA", laquo : "%AB", 171 : "%AB", not : "%AC", 172 : "%AC", shy : "%AD", 173 : "%AD", reg : "%AE", 174 : "%AE", macr : "%AF", 175 : "%AF", deg : "%B0",
  • 176 : "%B0", plusmn : "%B1", 177 : "%B1", sup2 : "%B2", 178 : "%B2", sup3 : "%B3", 179 : "%B3", acute : "%B4", 180 : "%B4", micro : "%B5", 181 : "%B5", para : "%B6", 182 : "%B6", middot : "%B7", 183 : "%B7", cedil : "%B8", 184 : "%B8", sup1 : "%B9", 185 : "%B9", ordm : "%BA", 186 : "%BA", raquo : "%BB", 187 : "%BB", frac14 : "%BC", 188 : "%BC", frac12 : "%BD", 189 : "%BD", frac34 : "%BE", 190 : "%BE", iquest : "%BF", 191 : "%BF", Agrave : "%C0", 192 : "%C0", Aacute : "%C1", 193 : "%C1", Acirc : "%C2", 194 : "%C2", Atilde : "%C3", 195 : "%C3", Auml : "%C4", 196 : "%C4", Aring : "%C5", 197 : "%C5", AElig : "%C6", 198 : "%C6", Ccedil : "%C7", 199 : "%C7", Egrave : "%C8", 200 : "%C8", Eacute : "%C9", 201 : "%C9", Ecirc : "%CA", 202 : "%CA", Euml : "%CB", 203 : "%CB", Igrave : "%CC", 204 : "%CC", Iacute : "%CD", 205 : "%CD", Icirc : "%CE", 206 : "%CE", Iuml : "%CF", 207 : "%CF", ETH : "%D0", 208 : "%D0", Ntilde : "%D1", 209 : "%D1", Ograve : "%D2", 210 : "%D2", Oacute : "%D3", 211 : "%D3", Ocirc : "%D4", 212 : "%D4", Otilde : "%D5", 213 : "%D5", Ouml : "%D6", 214 : "%D6", times : "%D7", 215 : "%D7", Oslash : "%D8", 216 : "%D8", Ugrave : "%D9", 217 : "%D9", Uacute : "%DA", 218 : "%DA",
  • Ucirc : "%DB", 219 : "%DB", Uuml : "%DC", 220 : "%DC", Yacute : "%DD", 221 : "%DD", THORN : "%DE", 222 : "%DE", szlig : "%DF", 223 : "%DF", agrave : "%E0", 224 : "%E0", aacute : "%E1", 225 : "%E1", acirc : "%E2", 226 : "%E2", atilde : "%E3", 227 : "%E3", auml : "%E4", 228 : "%E4", aring : "%E5", 229 : "%E5", aelig : "%E6", 230 : "%E6", ccedil : "%E7", 231 : "%E7", egrave : "%E8", 232 : "%E8", eacute : "%E9", 233 : "%E9", ecirc : "%EA", 234 : "%EA", euml : "%EB", 235 : "%EB", igrave : "%EC", 236 : "%EC", iacute : "%ED", 237 : "%ED", icirc : "%EE", 238 : "%EE", iuml : "%EF", 239 : "%EF", eth : "%F0", 240 : "%F0", ntilde : "%F1", 241 : "%F1", ograve : "%F2", 242 : "%F2", oacute : "%F3", 243 : "%F3", ocirc : "%F4", 244 : "%F4", otilde : "%F5", 245 : "%F5", ouml : "%F6", 246 : "%F6", divide : "%F7", 247 : "%F7", oslash : "%F8", 248 : "%F8", ugrave : "%F9", 249 : "%F9", uacute : "%FA", 250 : "%FA", ucirc : "%FB", 251 : "%FB", uuml : "%FC", 252 : "%FC", yacute : "%FD", 253 : "%FD", thorn : "%FE", 254 : "%FE", yuml : "%FF", 255 : "%FF"
  • }
  • if (matches != null) {
  • for (i=0; i<matches.length; i++) {
  • var code = matches[i].substring(1,matches[i].length-1);
  • if (code.charAt(0) == "#" && typeof entities[code.substr(1)] != "undefined") {
  • str = str.replace(matches[i], entities[code.substr(1)]);
  • } else {
  • if (typeof entities[code] != "undefined") {
  • str = str.replace(matches[i], entities[code]);
  • }
  • }
  • }
  • }
  • return str;
  • }
  • // Utilisation
  • alert(unescape(html_entities_decode('&#80;&#97;&#115;&nbsp;&#109;&#97;&#108;&#33;&#63;')));
function html_entity_decode(str) {
	// Convertis les entitees HTML en Hexadecimal
	// Merci a Arto_8000 de www.javascriptfr.com
	var matches = str.match(/&(#[0-9]{1,3}|[a-z]{2,6});/g);
	var entities = {
		32 : "%20", 33 : "%21", quot : "%22", 34 : "%22", 35 : "%23", 36 : "%24", 37 : "%25", amp : "%26", 38 : "%26", 39 : "%27", 40 : "%28", 41 : "%29", 42 : "%2A", 43 : "%2B", 44 : "%2C", 45 : "%2D", 46 : "%2E", 47 : "%2F", 48 : "%30", 49 : "%31", 50 : "%32", 51 : "%33", 52 : "%34", 53 : "%35", 54 : "%36", 55 : "%37", 56 : "%38", 57 : "%39", 58 : "%3A", 59 : "%3B", lt : "%3C", 60 : "%3C", 61 : "%3D", gt : "%3E", 62 : "%3E", 63 : "%3F", 64 : "%40", 65 : "%41", 66 : "%42", 67 : "%43", 68 : "%44", 69 : "%45", 70 : "%46", 71 : "%47", 72 : "%48", 73 : "%49", 74 : "%4A", 75 : "%4B", 76 : "%4C", 77 : "%4D", 78 : "%4E", 79 : "%4F", 80 : "%50", 81 : "%51", 82 : "%52", 83 : "%53", 84 : "%54", 85 : "%55", 86 : "%56", 87 : "%57", 88 : "%58", 89 : "%59", 90 : "%5A", 91 : "%5B", 92 : "%5C", 93 : "%5D", circ : "%5E", 94 : "%5E", 95 : "%5F", 96 : "%60", 97 : "%61", 98 : "%62", 99 : "%63", 100 : "%64", 101 : "%65", 102 : "%66", 103 : "%67", 104 : "%68", 105 : "%69", 106 : "%6A", 107 : "%6B", 108 : "%6C", 109 : "%6D", 110 : "%6E", 111 : "%6F", 112 : "%70", 113 : "%71", 114 : "%72", 115 : "%73", 116 : "%74", 117 : "%75", 118 : "%76", 119 : "%77", 120 : "%78",
		121 : "%79", 122 : "%7A", 123 : "%7B", 124 : "%7C", 125 : "%7D", 126 : "%7E", 127 : "%7F", 128 : "%80", 129 : "%81", 130 : "%82", 131 : "%83", 132 : "%84", 133 : "%85", 134 : "%86", 135 : "%87", 136 : "%88", 137 : "%89", 138 : "%8A", 139 : "%8B", 140 : "%8C", 141 : "%8D", 142 : "%8E", 143 : "%8F", 144 : "%90", lsquo : "%91", 145 : "%91", rsquo : "%92", 146 : "%92", ldquo : "%93", 147 : "%93", rdquo : "%94", 148 : "%94", bull : "%95", 149 : "%95", ndash : "%96", 150 : "%96", mdash : "%97", 151 : "%97", tilde : "%98", 152 : "%98", trade : "%99", 153 : "%99", scaron : "%9A", 154 : "%9A", rsaquo : "%9B", 155 : "%9B", oelig : "%9C", 156 : "%9C", 357 : "%9D", 157 : "%9D", 382 : "%9E", 158 : "%9E", Yuml : "%9F", 159 : "%9F", nbsp : "%A0", 160 : "%A0", iexcl : "%A1", 161 : "%A1", cent : "%A2", 162 : "%A2", pound : "%A3", 163 : "%A3", curren : "%A4", 164 : "%A4", yen : "%A5", 165 : "%A5", brvbar : "%A6", 166 : "%A6", sect : "%A7", 167 : "%A7", uml : "%A8", 168 : "%A8", copy : "%A9", 169 : "%A9", ordf : "%AA", 170 : "%AA", laquo : "%AB", 171 : "%AB", not : "%AC", 172 : "%AC", shy : "%AD", 173 : "%AD", reg : "%AE", 174 : "%AE", macr : "%AF", 175 : "%AF", deg : "%B0",
		176 : "%B0", plusmn : "%B1", 177 : "%B1", sup2 : "%B2", 178 : "%B2", sup3 : "%B3", 179 : "%B3", acute : "%B4", 180 : "%B4", micro : "%B5", 181 : "%B5", para : "%B6", 182 : "%B6", middot : "%B7", 183 : "%B7", cedil : "%B8", 184 : "%B8", sup1 : "%B9", 185 : "%B9", ordm : "%BA", 186 : "%BA", raquo : "%BB", 187 : "%BB", frac14 : "%BC", 188 : "%BC", frac12 : "%BD", 189 : "%BD", frac34 : "%BE", 190 : "%BE", iquest : "%BF", 191 : "%BF", Agrave : "%C0", 192 : "%C0", Aacute : "%C1", 193 : "%C1", Acirc : "%C2", 194 : "%C2", Atilde : "%C3", 195 : "%C3", Auml : "%C4", 196 : "%C4", Aring : "%C5", 197 : "%C5", AElig : "%C6", 198 : "%C6", Ccedil : "%C7", 199 : "%C7", Egrave : "%C8", 200 : "%C8", Eacute : "%C9", 201 : "%C9", Ecirc : "%CA", 202 : "%CA", Euml : "%CB", 203 : "%CB", Igrave : "%CC", 204 : "%CC", Iacute : "%CD", 205 : "%CD", Icirc : "%CE", 206 : "%CE", Iuml : "%CF", 207 : "%CF", ETH : "%D0", 208 : "%D0", Ntilde : "%D1", 209 : "%D1", Ograve : "%D2", 210 : "%D2", Oacute : "%D3", 211 : "%D3", Ocirc : "%D4", 212 : "%D4", Otilde : "%D5", 213 : "%D5", Ouml : "%D6", 214 : "%D6", times : "%D7", 215 : "%D7", Oslash : "%D8", 216 : "%D8", Ugrave : "%D9", 217 : "%D9", Uacute : "%DA", 218 : "%DA",
		Ucirc : "%DB", 219 : "%DB", Uuml : "%DC", 220 : "%DC", Yacute : "%DD", 221 : "%DD", THORN : "%DE", 222 : "%DE", szlig : "%DF", 223 : "%DF", agrave : "%E0", 224 : "%E0", aacute : "%E1", 225 : "%E1", acirc : "%E2", 226 : "%E2", atilde : "%E3", 227 : "%E3", auml : "%E4", 228 : "%E4", aring : "%E5", 229 : "%E5", aelig : "%E6", 230 : "%E6", ccedil : "%E7", 231 : "%E7", egrave : "%E8", 232 : "%E8", eacute : "%E9", 233 : "%E9", ecirc : "%EA", 234 : "%EA", euml : "%EB", 235 : "%EB", igrave : "%EC", 236 : "%EC", iacute : "%ED", 237 : "%ED", icirc : "%EE", 238 : "%EE", iuml : "%EF", 239 : "%EF", eth : "%F0", 240 : "%F0", ntilde : "%F1", 241 : "%F1", ograve : "%F2", 242 : "%F2", oacute : "%F3", 243 : "%F3", ocirc : "%F4", 244 : "%F4", otilde : "%F5", 245 : "%F5", ouml : "%F6", 246 : "%F6", divide : "%F7", 247 : "%F7", oslash : "%F8", 248 : "%F8", ugrave : "%F9", 249 : "%F9", uacute : "%FA", 250 : "%FA", ucirc : "%FB", 251 : "%FB", uuml : "%FC", 252 : "%FC", yacute : "%FD", 253 : "%FD", thorn : "%FE", 254 : "%FE", yuml : "%FF", 255 : "%FF"
	}
	if (matches != null) {
		for (i=0; i<matches.length; i++) {
			var code = matches[i].substring(1,matches[i].length-1);
			if (code.charAt(0) == "#" && typeof entities[code.substr(1)] != "undefined") {
				str = str.replace(matches[i], entities[code.substr(1)]);
			} else {
				if (typeof entities[code] != "undefined") {
					str = str.replace(matches[i], entities[code]);
				}
			}
		}
	}
	return str;
}

// Utilisation
alert(unescape(html_entities_decode('&#80;&#97;&#115;&nbsp;&#109;&#97;&#108;&#33;&#63;')));

 Conclusion

J'espère que ce petit code peut vous être utile!


 Historique

19 mars 2010 17:05:47 :
Typo
25 mars 2010 18:04:39 :
Beaucoup plus optimisé, merci Arto_8000

 Sources de la même categorie

PARSER LES CARACTÈRES HTML D'UNE STRING par jdmcreator
CONSTRUCTION D'UNE TABLE TRIABLE À PARTIR D'UN TABLEAU 2D par phm
Source avec Zip Source avec une capture SUBDIVISER LE RÉSULTAT D'UNE RECHERCHE EN PAGES par kimmp
Source avec Zip TIMER : SETTIMEOUT & SETINTERVAL AMÉLIORÉS par jdmcreator
Source avec Zip Source avec une capture ONGLETS ET CHANGEMENT INSTANTANÉ DE LA LANGUE par william voirol

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture FORMULAIRE TABLEAU par vic511
PARSER LES CARACTÈRES HTML D'UNE STRING par jdmcreator
Source avec Zip Source avec une capture SUBDIVISER LE RÉSULTAT D'UNE RECHERCHE EN PAGES par kimmp
Source avec Zip FONCTION ALERT ET LES ACCENTS par PetoleTeam
Source avec Zip ENIGME par linkid

Commentaires et avis

Commentaire de Arto_8000 le 20/03/2010 17:44:25

Je doute très fortement que faire 340 replace avec des expressions régulières en javascript soit la meilleur solution pour faire cette tâche qui n'est pas si complexe. Surtout que le seul truc qui est à hardcoder c'est les équivalences pour les entités avec les noms. Oublie pas que les replaces avec les regexp parcourent toute la chaîne, donc ton script parcoure à tout coup 340 fois la même chaîne ce qui est évidemment lourd.

Un algorythme plus optimisé (et plus simple) devrait ressembler à quelque chose comme ceci :

function html_decode(html) {
var matches = html.match(/&(#[0-9]{1,3}|[a-z]{2,4});/gi);
var nameEntities = {
quot : "\"",
apos : "'",
amp  : "&",
lt   : "<",
gt   : ">",
nbsp : " "
}

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], String.fromCharCode(code.substr(1)));
} else {
if (typeof nameEntities[code] != "undefined") {
html = html.replace(matches[i], nameEntities[code]);
}
}
}
}

return html;
}

Commentaire de BaFM le 22/03/2010 09:29:42

Une autre technique consite à utiliser le fait que le navigateur sait faire cette conversion tout seul. Créer un élément, définir son texte HTML (innerHTML), récupérer sont texte décoder (innerText).
Il peut y avoir des problèmes de compatibilité.

Commentaire de jdmcreator le 23/03/2010 00:52:30

BaFM : Il peut y avoir des problèmes de compatibilité.

En effet, sous Firefox il faut utiliser element.contentText. J'ai aussi déjà entendu parler vaguement d'un element.style.content mais je n'en ai jamais vu d'utilisation

Commentaire de zen69 le 23/03/2010 18:50:31

Arto_8000: ta fonction est très loin d'être complète. Cependant je comprend bien que dans ton exemple il va faire le replace seulement à la mesure des matchs trouvé ce qui est bien, cependant ta fonction elle effectue plusieurs opérations pour chaque match.

Merci tout de même pour ta précision, je tenterai d'optimisé à l'aide de ce que tu as dis, quand j'aurai du temps, si le coeur m'en dit.

Commentaire de zen69 le 23/03/2010 19:22:15

BaFM : une autre technique est de lire de descriptif avant de posté.

J'utilise la fonction pour mes alert() et mes confirm(...), et le n'avigateur ne fait justement pas la conversion tout seul. Et dans ta pseudo solution tu évoques toi même qu'elle ne fonctionne pas partout!

Commentaire de BaFM le 23/03/2010 20:06:24

Entre une solution lente et qui ne fait pas tous les cas et une solution qui nécessite quelques minutes de recherche pour être compatible tout navigateur. Je préfère la dernière.

Et il y a d'autres manières de faire passer sans problème d'encodage ces éléments.

Commentaire de Arto_8000 le 23/03/2010 22:19:35

"ta fonction est très loin d'être complète"

La seule chose qui manque c'est de compléter la liste des entités avec des noms et la seule raison pour laquelle je l'ai pas fait au complète c'est que de 1 ça prend énormément de place dans les commentaires et de deux n'importe qui peut compléter la liste à partir de liste facilement trouvable sur le web. Ce que j'ai voulu montré c'est l'algorithme le plus intéressant pour faire ce genre d'opération.

"cependant ta fonction elle effectue plusieurs opérations pour chaque match"

C'est très floue comme affirmation et pas tout à fait vrai. Comme tel il y a un seul replace (sans regexp) qui est fait par match.

Commentaire de zen69 le 24/03/2010 14:59:58

Arto_8000: mais disons que j'ai 250 accents aiguë dans mon string. Il va faire le replace 250 fois non?

Si tel est le case, c'est plus optimisé selon l'utilisation qu'on en fait...?

De plus ma fonction retournais un chaîne hex... contrairement à ta fonction qui retourne les caractères décodés.

Je ne sais pas s'il y a un équivalent à String.fromCharCode pour transformer en hex, mais d'ici à ce que je trouve, je ne changerai pas ma fonction.

Commentaire de Arto_8000 le 24/03/2010 15:32:01

Il faut que tu comprennes d'abord qu'il y a une grosse différence entre un replace avec regexp et sans regexp. Un replace simple prend beaucoup moins de temps à s'exécuter qu'un regexp avec une expression régulière. Une expression régulière doit être compilé et après être exécuté. En plus, un replace avec une expression régulière ne s'arrête pas après la première occurrence. Un replace simple est beaucoup plus ciblé contrairement à un replace avec un regexp.

"Je ne sais pas s'il y a un équivalent à String.fromCharCode pour transformer en hex, mais d'ici à ce que je trouve, je ne changerai pas ma fonction."

Cette fonction s'appelle escape.

https://developer.mozilla.org/fr/Guide_JavaScript_1.5/Fonctions_pr%C3%A9d%C3%A9finies/Les_fonctions_escape_et_unescape

Commentaire de jdmcreator le 25/03/2010 00:05:41

Ben voyons... Ceci devrait fonctionner

<script type="text/javascript">
function convertToHex(ty){

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

}
alert(unescape(convertToHex("&quot; + &eacute;")));
</script>

Petite précision : on devrait plutôt indiquer <script type="application/javascript"> selon les dernières nouvelles mais je n'ai pas encore eu la confirmation que tous les navigateurs le comprendront

Commentaire de zen69 le 25/03/2010 16:41:30

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

Commentaire de zen69 le 25/03/2010 16:48:38

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  

Commentaire de zen69 le 25/03/2010 18:11:26

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 &Agrave pour prendre l'entitée complète 4 étant trop court.

Encore une fois merci à Arto_8000 pour sa grande aide!!

Commentaire de jdmcreator le 25/03/2010 23:56:50

-_-

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("&quot; + &eacute;")));

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

php et javascript dans une boite confirm [ par alexjet ] bonjour à tous, J'aimerai recupérer dans une variable php une variable javascript, voici mon script : ---------------------- function confirm($msg) { debutant fonction alert [ par jimmy69 ] Bonjour a tous,Je debute sous javascript et j'aimerais realiser une p'tite application javascript + phpBref je vous explique mon stress...J'essaye de addition toute simple en javascript [ par newbie70 ] bonjour,Ma question est&nbsp; un peu bete, mais je voudrais tout simplement savoir comment on effectue une addition, et on affiche le resultat par al Alert en javascript [ par marsbidon ] Bonsoir,Je n'arrive pas à trouver le code qu'il me faut pour faire ceci :    - à la fermeture d'une page web, afficher un message de type boite de dia Javascript faire un setAttribute de style avec FireFox [ par JPVIO ] Bonjour Je cherche à modifier la couleur d'un texte au survol de la souris OK dans une cellule d'un tableau cela fonction trés bien avec IE Mais pas Personnalisez javascript Alert '' ; [ par le_m3ellem ] Bonjour tt le monde !SVP ! J'aimerais savoir si on peut personnaliser la boite de dialogue qu'affiche la fonction javascript Alert(): ! la personnalis Pb avec les string (mix php-javascript) [ par 27 ] Salut,je viens vous demandez de l'aide car j'ai un probleme que je ne sais resoudre.Je fais actuellement une fonction javascript qui par selection dan Probleme Alert JavaScript [ par nanati02 ] Slt à tous,je cree une application en jsp et je dois faire un test sur un formulaire d'ajout si il est valide l'ajout s'affiche dans une liste qui app Empecher les alert() javascript dans une iframe [ par lolpop ] Bonjour,je n'y connais rien en javascript.Mais j'aurais besoin de votre aide.Sur mon site, j'ai une iframe en bas de page ou défile les sites des visi récupérer les données d'un form javascript dans base de données Access [ par daviddubois ] Bonjour tout le monde, Y'a t'il moyen de récupérer les informations d'un formulaire javascript dans une base de données Access ? Que ça soit en P


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,435 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales