Además de utilizar una función de devolución de llamada, es posible que desee considerar la adición de soporte para las referencias de carácter hexadecimal (ሴ
).
Además, fromCharCode
puede que no sea suficiente. por ejemplo, 𐤀
es una referencia válida para un personaje fenicio, pero como está fuera del plano multilingüe básico y el modelo de cadena de JavaScript se basa en unidades de código UTF-16, no completan los puntos de código de carácter, fromCharCode(67840)
no funcionará. Necesitaría un codificador UTF-16, por ejemplo:
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 𐤀!'));
Eso simplemente devuelve '" foos bar "'. ¿Me estoy perdiendo de algo? Edit: Oh, aparentemente eso es porque 'match' =' "'" 'y no solo el' 39'. – alfonso
sí, estás en lo correcto, he corregido el código desde entonces –
¡Gracias, eso funciona! Aceptaré tu respuesta en 5 minutos. – alfonso