Преобразуйте от английских Цифр до арабских в странице HTML

Для примера языка, который покончил с традиционным программированием текста, посмотрите Язык Лавы .

Другая изящная вещь, которую я просто недавно обнаружил, subtext2 ( демонстрационное видео ).

18
задан Sarah 4 November 2009 в 18:37
поделиться

4 ответа

Как насчет функции прямой замены?

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
*/
38
ответ дан 30 November 2019 в 05:51
поделиться

Вам нужно будет использовать JavaScript, но процедура довольно проста. Если предположить, что число, которое вы хотите преобразовать, уже находится в строке, то что-то вроде следующего фрагмента кода будет работать:

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

Код не очень красивый и, вероятно, может быть написан более эффективно, но по сути то, что он делает, это преобразование любой символ от «0» до «9» путем добавления значения смещения, чтобы значение символа теперь находилось в диапазоне Unicode для индийских цифр. Индийские цифры находятся в диапазоне от \ u0660 до \ u0669, поэтому преобразование европейских цифр в индийские осуществляется простой математикой.

11
ответ дан 30 November 2019 в 05:51
поделиться

Чтобы объяснить этот комментарий:

Как и в этой ссылке almasry-alyoum.com, когда я просматриваю исходный код этой страницы, Я обнаружил, что индийские буквы помещены в их представление ascii (т.е. & # 1634; & # 1635; & # 1639; )

Это объекты символов HTML. Значения являются кодовыми точками Unicode, как определено в документации .

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

Таким образом, ٠ ١ ٢ ٣ ٤ ٥ ٦ ٧ ٨ может быть закодирован как & # x0660; & # x0661; & # x0662; & # x0663; & # x0664; & # x0665; & # x0666; & # x0667; & # x0668; & # x0669; на веб-странице.

Примечание: & # для десятичных значений; & # x для шестнадцатеричного.

# x0663; & # x0664; & # x0665; & # x0666; & # x0667; & # x0668; & # x0669; на веб-странице.

Примечание: & # для десятичных значений; & # x для шестнадцатеричного.

# x0663; & # x0664; & # x0665; & # x0666; & # x0667; & # x0668; & # x0669; на веб-странице.

Примечание: & # для десятичных значений; & # x для шестнадцатеричного.

7
ответ дан 30 November 2019 в 05:51
поделиться

The "ASCII equivalents" you are referring to are not actually that at all.

First of all, ASCII is a 7-bit character encoding in which characters like Arabic-Indic Digit Two don't exist.

Secondly, what you are seeing are actually HTML Entities. To programmatically make a conversion from Latin numerals to these entities would require the exertion of a backend language like PHP, Perl, C#, etc.

Thirdly, the numeric value represented in the entities is their Unicode Code Point in decimal form. So ٢ is the Unicode character at code point 1634 (decimal) or 0662 (hex), which is the more standard notation.

Lastly, I like ferdley's approach, but the tricky part will figuring out how to use his algorithm to replace only the numbers you want, and not numbers that otherwise appear in the HTML source, such as the pixel-width of an image.

1
ответ дан 30 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: