En plus d'utiliser une fonction de rappel, vous pouvez envisager d'ajouter le support pour les références de caractère hexagonal (ሴ
).
En outre,peut ne pas suffire. Par exemple 𐤀
est une référence valide à un caractère phénicien, mais parce qu'il est en dehors du plan multilingue de base et que le modèle String de JavaScript est basé sur des unités de code UTF-16, pas de code complet, fromCharCode(67840)
ne fonctionnera pas. Vous auriez besoin d'un encodeur UTF-16, par exemple:
String.fromCharCodePoint= function(/* codepoints */) {
var codeunits= [];
for (var i= 0; i<arguments.length; i++) {
var c= arguments[i];
if (arguments[i]<0x10000) {
codeunits.push(arguments[i]);
} else if (arguments[i]<0x110000) {
c-= 0x10000;
codeunits.push((c>>10 & 0x3FF) + 0xD800);
codeunits.push((c&0x3FF) + 0xDC00);
}
}
return String.fromCharCode.apply(String, codeunits);
};
function decodeCharacterReferences(s) {
return s.replace(/&#(\d+);/g, function(_, n) {;
return String.fromCharCodePoint(parseInt(n, 10));
}).replace(/&#x([0-9a-f]+);/gi, function(_, n) {
return String.fromCharCodePoint(parseInt(n, 16));
});
};
alert(decodeCharacterReferences('Hello 𐤀 mum 𐤀!'));
Cela renvoie juste '' 'foos bar'' '. Est-ce que je manque quelque chose? Edit: Oh, apparemment, c'est parce que 'match' =" ' "' et pas seulement le '39'. – alfonso
oui vous avez raison, j'ai corrigé le code depuis –
Merci, ça marche! Je vais accepter votre réponse dans 5 minutes. – alfonso