Conversion de chiffres anglais en chiffres arabes dans la page html

j'ai besoin de convertir tous les anglais numéros qui s'affichent dans une page HTML à l'arabe (pour être indépendant du navigateur de l'utilisateur de l'encodage). Je préfère utiliser javascript ou ce sera génial si cela peut être traité en utilisant CSS.

j'ai trouvé quelques pages faisant ceci mais j'ai trouvé que les lettres arabes sont ajoutées avec leur représentation ASCII dans le code source. Veut-il dire qu'ils sont en appliquant une sorte de fonction javascript?

n'importe quel indice Comment puis-je faire quelque chose de cette façon?

17
demandé sur Sarah 2009-11-04 21:37:32

6 réponses

Que Diriez-vous d'une fonction de remplacement simple?

String.prototype.toIndiaDigits= function(){
 var id= ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'];
 return this.replace(/[0-9]/g, function(w){
  return id[+w]
 });
}

// test

var S='The year 2009 has only 365 days';
alert(S.toIndiaDigits());

/*  returned value: (String)
The year ۲۰۰۹ has only ۳۶۵ days
*/
29
répondu kennebec 2015-02-21 09:22:31

Vous devrez utiliser JavaScript, mais la procédure est assez simple. En supposant que le nombre que vous voulez convertir est déjà dans une chaîne, alors quelque chose comme le morceau de code suivant fonctionnera:

function convertDigitIn(enDigit){ // PERSIAN, ARABIC, URDO
    var newValue="";
    for (var i=0;i<enDigit.length;i++)
    {
        var ch=enDigit.charCodeAt(i);
        if (ch>=48 && ch<=57)
        {
            // european digit range
            var newChar=ch+1584;
            newValue=newValue+String.fromCharCode(newChar);
        }
        else
            newValue=newValue+String.fromCharCode(ch);
    }
    return newValue;
}

le code n'est pas très joli et peut probablement être écrit plus efficacement, mais essentiellement ce qu'il fait est de convertir n'importe quel char de "0" à "9" en ajoutant une valeur de décalage pour faire la valeur de caractère maintenant être dans la gamme unicode pour les chiffres Indic. Le Les chiffres indiques vont de \u0660 à \u0669 donc la conversion des chiffres européens en chiffres indiques n'est que des mathématiques simples.

11
répondu ferdley 2014-01-20 12:54:54

Pour expliquer ce commentaire:

comme dans ce lien almasry-alyoum.com quand je regarde la source de cette page, je trouve que les lettres indiennes sont mises dans leur représentation ascii (i.e. &#1634;&#1635;&#1639;)

ce sont des entités de caractères HTML. Les valeurs sont des codépoints Unicode définis par le documentation.

0660 ARABIC-INDIC DIGIT ZERO
0661 ARABIC-INDIC DIGIT ONE
0662 ARABIC-INDIC DIGIT TWO
0663 ARABIC-INDIC DIGIT THREE
0664 ARABIC-INDIC DIGIT FOUR
0665 ARABIC-INDIC DIGIT FIVE
0666 ARABIC-INDIC DIGIT SIX
0667 ARABIC-INDIC DIGIT SEVEN
0668 ARABIC-INDIC DIGIT EIGHT
0669 ARABIC-INDIC DIGIT NINE

Donc, ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ ٩ peut être codée sous la forme &#x0660; &#x0661; &#x0662; &#x0663; &#x0664; &#x0665; &#x0666; &#x0667; &#x0668; &#x0669; dans une page web.

Remarque: &# pour valeurs décimales;&#x pour hex.

7
répondu McDowell 2009-11-04 19:13:30

Merci pour les réponses. Personne n'a discuté de la manipulation des marqueurs décimaux et des marqueurs de milliers. Voir Wikipédia par exemple. Selon cette page, ce sont les caractères unicode corrects:

  • U+066B - séparateur décimal arabe
  • U+066C - séparateur arabe de milliers
5
répondu Nic Cottrell 2011-02-15 09:39:33

Convertissez les chiffres anglais (latins) en chiffres persans et arabes.

//English to Persian digits.
String.prototype.toFa= function() {
  return this.replace(/\d/g, d => '۰۱۲۳۴۵۶۷۸۹'[d])
}

//English to Arabic digits.
String.prototype.toAr= function() {
  return this.replace(/\d/g, d =>  '٠١٢٣٤٥٦٧٨٩'[d])
}

//English to either Persian or Arabic digits.
String.prototype.toIn= function(e) {
  return this.replace(/\d/g, d => e ? '٠١٢٣٤٥٦٧٨٩'[d] : '۰۱۲۳۴۵۶۷۸۹'[d])
}

//English to Persian digits using unicode.
String.prototype.toFaUni= function() {
  return this.replace(/\d/g, d => String.fromCharCode('0x06F'+d))
}

//English to Arabic digits using unicode.
String.prototype.toArUni= function() {
  return this.replace(/\d/g, d => String.fromCharCode('0x066'+d))
}

//English to either Persian or Arabic digits.
String.prototype.toInUni= function(e) {
  return this.replace(/\d/g, d => String.fromCharCode('0x06'+(e ? '6':'F')+d))
}

//examples
let text = 'It is 30/08/2018 at 8:24 AM'

//using array
alert(text.toFa())
alert(text.toAr())
alert(text.toIn(0))
alert(text.toIn(1))

//using unicode
alert(text.toFaUni())
alert(text.toArUni())
alert(text.toInUni(0))
alert(text.toInUni(1))

jsfiddle

2
répondu Amigo 2018-08-30 08:39:04

L'ASCII "équivalents" vous faites allusion ne sont pas vraiment tout.

tout d'abord, ASCII est un codage de caractères de 7 bits dans lequel des caractères comme Arabe-Hindi Chiffres Deux n'existent pas.

Deuxièmement, ce que vous voyez sont en fait entités HTML. Programmatically faire une conversion des chiffres latins à ces entités exigerait l'effort d'un langage d'arrière-plan comme PHP, Perl, C#, etc.

Troisièmement, la valeur numérique représentée dans les entités est leur point de Code Unicode sous forme décimale. Ainsi, le caractère Unicode est le point de code 1634 (décimal) ou 0662 (hex), qui est la notation la plus standard.

enfin, j'aime l'approche de ferdley, mais la partie délicate va comprendre comment utiliser Son algorithme pour remplacer seulement les nombres que vous voulez, et non les nombres qui apparaissent autrement dans la source HTML, comme la largeur de pixel d'une image.

1
répondu Peter Bailey 2009-11-04 19:12:54