Si je ne m'abuse, ça doit être un truc comme ça : valeur = 0x1D11E - 0x10000; s = String.fromCharCode(0xD800 + (valeur>>10), 0xDC00 + (valeur&0x3FF));
Je laisse le code ci-dessus, puisque visiblement tu ne l'as pas vu.
Est ce que tu pourrais me corriger la fonction javascript :
var reg = /[c=(x?[0-9a-fA-F]+)]/g; body = body.replace(reg, function(s, m){num = (m[0] != 'x') ? parseInt(m) : parseInt(m.substr(1), 16); return String.fromCharCode(num);});
Non, tu ne peux pas traiter par un fromCharCode à un seul paramètre les caractères en dehors du plan de base. Cf. ci-dessus, je t'ai déjà répondu, et tu peux voir aussi la réponse de Duzz.
Pour être plus complet, après le 'num = parseInt(...)', il faudrait un truc du genre : if (unicodeIsValid(num)) { if (num <= 0xFFFF) { return String.fromCharCode(num); } else { num -= 0x10000; return String.fromCharCode(0xD800+(num>>10), 0xDC00+(num&0x3FF)); } } else { return "?"; }
Où la fonction unicodeIsValid() doit éliminer tous les codes invalides (cf. les docs si tu sais faire, là je n'ai pas trop le temps).
Certainement pas non plus. Il faut écrire un encodage en UTF-8 en PHP, de même que pour JavaScript il faut un encodage en UTF-16 (mais c'est plus facile).
Une solution pourrait être de faire le même traitement que pour UTF-16, puis à passer un petit coup d'iconv() d'UTF-16 vers UTF-8.
Pour les valeurs < 0xFFFF ceci fonctionne : mb_convert_encoding('[', 'UTF-8', 'HTML-ENTITIES');
Mais pas mb_convert_encoding('𝄞', 'UTF-8', 'HTML-ENTITIES');
Si je ne m'abuse, ça doit être un truc comme ça :
valeur = 0x1D11E - 0x10000;
s = String.fromCharCode(0xD800 + (valeur>>10), 0xDC00 +
(valeur&0x3FF));
Je laisse le code ci-dessus, puisque visiblement tu ne l'as pas vu.
Est ce que tu pourrais me corriger la fonction javascript :
var reg = /[c=(x?[0-9a-fA-F]+)]/g;
body = body.replace(reg, function(s, m){num = (m[0] != 'x') ?
parseInt(m) :
parseInt(m.substr(1), 16); return String.fromCharCode(num);});
Non, tu ne peux pas traiter par un fromCharCode à un seul paramètre
les caractères en dehors du plan de base. Cf. ci-dessus, je t'ai
déjà
répondu, et tu peux voir aussi la réponse de Duzz.
Pour être plus complet, après le 'num = parseInt(...)', il faudrait un
truc du genre :
if (unicodeIsValid(num)) {
if (num <= 0xFFFF) {
return String.fromCharCode(num);
} else {
num -= 0x10000;
return String.fromCharCode(0xD800+(num>>10), 0xDC00+(num&0x3FF));
}
} else {
return "?";
}
Où la fonction unicodeIsValid() doit éliminer tous les codes invalides
(cf. les docs si tu sais faire, là je n'ai pas trop le temps).
Certainement pas non plus. Il faut écrire un encodage en UTF-8 en
PHP,
de même que pour JavaScript il faut un encodage en UTF-16 (mais c'est
plus facile).
Une solution pourrait être de faire le même traitement que pour
UTF-16,
puis à passer un petit coup d'iconv() d'UTF-16 vers UTF-8.
Pour les valeurs < 0xFFFF ceci fonctionne :
mb_convert_encoding('[', 'UTF-8', 'HTML-ENTITIES');
Mais pas mb_convert_encoding('𝄞', 'UTF-8', 'HTML-ENTITIES');
Si je ne m'abuse, ça doit être un truc comme ça : valeur = 0x1D11E - 0x10000; s = String.fromCharCode(0xD800 + (valeur>>10), 0xDC00 + (valeur&0x3FF));
Je laisse le code ci-dessus, puisque visiblement tu ne l'as pas vu.
Est ce que tu pourrais me corriger la fonction javascript :
var reg = /[c=(x?[0-9a-fA-F]+)]/g; body = body.replace(reg, function(s, m){num = (m[0] != 'x') ? parseInt(m) : parseInt(m.substr(1), 16); return String.fromCharCode(num);});
Non, tu ne peux pas traiter par un fromCharCode à un seul paramètre les caractères en dehors du plan de base. Cf. ci-dessus, je t'ai déjà répondu, et tu peux voir aussi la réponse de Duzz.
Pour être plus complet, après le 'num = parseInt(...)', il faudrait un truc du genre : if (unicodeIsValid(num)) { if (num <= 0xFFFF) { return String.fromCharCode(num); } else { num -= 0x10000; return String.fromCharCode(0xD800+(num>>10), 0xDC00+(num&0x3FF)); } } else { return "?"; }
Où la fonction unicodeIsValid() doit éliminer tous les codes invalides (cf. les docs si tu sais faire, là je n'ai pas trop le temps).
Certainement pas non plus. Il faut écrire un encodage en UTF-8 en PHP, de même que pour JavaScript il faut un encodage en UTF-16 (mais c'est plus facile).
Une solution pourrait être de faire le même traitement que pour UTF-16, puis à passer un petit coup d'iconv() d'UTF-16 vers UTF-8.
Pour les valeurs < 0xFFFF ceci fonctionne : mb_convert_encoding('[', 'UTF-8', 'HTML-ENTITIES');
Mais pas mb_convert_encoding('𝄞', 'UTF-8', 'HTML-ENTITIES');
Si je ne m'abuse, ça doit être un truc comme ça : valeur = 0x1D11E - 0x10000; s = String.fromCharCode(0xD800 + (valeur>>10), 0xDC00 + (valeur&0x3FF));
Je laisse le code ci-dessus, puisque visiblement tu ne l'as pas vu.
Est ce que tu pourrais me corriger la fonction javascript :
var reg = /[c=(x?[0-9a-fA-F]+)]/g; body = body.replace(reg, function(s, m){num = (m[0] != 'x') ? parseInt(m) : parseInt(m.substr(1), 16); return String.fromCharCode(num);});
Non, tu ne peux pas traiter par un fromCharCode à un seul paramètre les caractères en dehors du plan de base. Cf. ci-dessus, je t'ai déjà répondu, et tu peux voir aussi la réponse de Duzz.
Pour être plus complet, après le 'num = parseInt(...)', il faudrait un truc du genre : if (unicodeIsValid(num)) { if (num <= 0xFFFF) { return String.fromCharCode(num); } else { num -= 0x10000; return String.fromCharCode(0xD800+(num>>10), 0xDC00+(num&0x3FF)); } } else { return "?"; }
Où la fonction unicodeIsValid() doit éliminer tous les codes invalides (cf. les docs si tu sais faire, là je n'ai pas trop le temps).
Et pour le PHP :
$body = preg_replace_callback('/[c=(x?[0-9a-fA-F]+)]/', function
Certainement pas non plus. Il faut écrire un encodage en UTF-8 en PHP, de même que pour JavaScript il faut un encodage en UTF-16 (mais c'est plus facile).
Une solution pourrait être de faire le même traitement que pour UTF-16, puis à passer un petit coup d'iconv() d'UTF-16 vers UTF-8.
Pour les valeurs < 0xFFFF ceci fonctionne : mb_convert_encoding('[', 'UTF-8', 'HTML-ENTITIES');
Mais pas mb_convert_encoding('𝄞', 'UTF-8', 'HTML-ENTITIES');
Si je ne m'abuse, ça doit être un truc comme ça :
valeur = 0x1D11E - 0x10000;
s = String.fromCharCode(0xD800 + (valeur>>10), 0xDC00 +
(valeur&0x3FF));
Je laisse le code ci-dessus, puisque visiblement tu ne l'as pas vu.
Est ce que tu pourrais me corriger la fonction javascript :
var reg = /[c=(x?[0-9a-fA-F]+)]/g;
body = body.replace(reg, function(s, m){num = (m[0] != 'x') ?
parseInt(m) :
parseInt(m.substr(1), 16); return String.fromCharCode(num);});
Non, tu ne peux pas traiter par un fromCharCode à un seul
paramètre
les caractères en dehors du plan de base. Cf. ci-dessus, je t'ai
déjà
répondu, et tu peux voir aussi la réponse de Duzz.
Pour être plus complet, après le 'num = parseInt(...)', il faudrait
un
truc du genre :
if (unicodeIsValid(num)) {
if (num <= 0xFFFF) {
return String.fromCharCode(num);
} else {
num -= 0x10000;
return String.fromCharCode(0xD800+(num>>10),
0xDC00+(num&0x3FF));
}
} else {
return "?";
}
Où la fonction unicodeIsValid() doit éliminer tous les codes
invalides
(cf. les docs si tu sais faire, là je n'ai pas trop le temps).
Et pour le PHP :
$body = preg_replace_callback('/[c=(x?[0-9a-fA-F]+)]/', function
Certainement pas non plus. Il faut écrire un encodage en UTF-8 en
PHP,
de même que pour JavaScript il faut un encodage en UTF-16 (mais
c'est
plus facile).
Une solution pourrait être de faire le même traitement que pour
UTF-16,
puis à passer un petit coup d'iconv() d'UTF-16 vers UTF-8.
Pour les valeurs < 0xFFFF ceci fonctionne :
mb_convert_encoding('[', 'UTF-8', 'HTML-ENTITIES');
Mais pas mb_convert_encoding('𝄞', 'UTF-8', 'HTML-ENTITIES');
Si je ne m'abuse, ça doit être un truc comme ça : valeur = 0x1D11E - 0x10000; s = String.fromCharCode(0xD800 + (valeur>>10), 0xDC00 + (valeur&0x3FF));
Je laisse le code ci-dessus, puisque visiblement tu ne l'as pas vu.
Est ce que tu pourrais me corriger la fonction javascript :
var reg = /[c=(x?[0-9a-fA-F]+)]/g; body = body.replace(reg, function(s, m){num = (m[0] != 'x') ? parseInt(m) : parseInt(m.substr(1), 16); return String.fromCharCode(num);});
Non, tu ne peux pas traiter par un fromCharCode à un seul paramètre les caractères en dehors du plan de base. Cf. ci-dessus, je t'ai déjà répondu, et tu peux voir aussi la réponse de Duzz.
Pour être plus complet, après le 'num = parseInt(...)', il faudrait un truc du genre : if (unicodeIsValid(num)) { if (num <= 0xFFFF) { return String.fromCharCode(num); } else { num -= 0x10000; return String.fromCharCode(0xD800+(num>>10), 0xDC00+(num&0x3FF)); } } else { return "?"; }
Où la fonction unicodeIsValid() doit éliminer tous les codes invalides (cf. les docs si tu sais faire, là je n'ai pas trop le temps).
Et pour le PHP :
$body = preg_replace_callback('/[c=(x?[0-9a-fA-F]+)]/', function
Certainement pas non plus. Il faut écrire un encodage en UTF-8 en PHP, de même que pour JavaScript il faut un encodage en UTF-16 (mais c'est plus facile).
Une solution pourrait être de faire le même traitement que pour UTF-16, puis à passer un petit coup d'iconv() d'UTF-16 vers UTF-8.
Pour les valeurs < 0xFFFF ceci fonctionne : mb_convert_encoding('[', 'UTF-8', 'HTML-ENTITIES');
Mais pas mb_convert_encoding('𝄞', 'UTF-8', 'HTML-ENTITIES');